2013-03-08 2 views
3

Я не знаю, как сформулировать свой вопрос, но здесь он идет. Я хотел бы узнать, возможно ли в SAS создать желаемый набор данных, даже если входной набор данных отсутствует или не существует.SAS - Создание набора данных независимо от входного набора данных

Итак, если вы посмотрите на код ниже, я хочу создать тестовый набор данных с указанными атрибутами, даже если фиктивный входной набор данных не существует. Это возможно?

Заранее спасибо.

Data test; 
set dummy; 
label subjid = "Subject ID" 
     name = "Name" 
     age = "Age"; 
Run; 

ответ

3

Проверьте, если набор данных существует, если она затем выполнить шаг данных, если нет, то создать пустой набор данных. Может быть проще сначала создать пустую версию фиктивного набора данных, а затем прочитать от того или другого в зависимости от того, существует ли первый.

%macro ds_create(dsn); 
%if %sysfunc(exist(&dsn.)) %then %do; 
    data test; 
    set &dsn.; 
    run; 
%end; 
%else %do; 
    data test; 
    attrib 
     subjid length=$20 label="Subject ID" 
     name length=$20 label="Name" 
     age  length=8 label="Age"; 
    stop; 
    run; 
%end; 
%mend ds_create; 

%ds_create(dummy); 
+0

Hi Keith - думаю, что утверждение атрибута должно быть в пределах первого условия тестирования, если я правильно прочитал OP. –

0

Ответ Кита является хорошим. Альтернативный метод для создания тестового стола:

proc sql; 
create table test 
    (subjid char(20) label="Subject ID" 
     ,name char(20) label="Name" 
     ,age num label="Age" 
    ); 
quit; 
1

PROC APPEND - это еще одно решение. Вам нужно определить переменные длины и/или форматы.

Data test; 
label subjid = "Subject ID" 
     name = "Name" 
     age = "Age"; 
length subjID 8 name $20 age 3; 
stop; 
Run; 

proc append base=dummy data=test force; 
run; 

Это добавит нулевые строки в Dummy и при необходимости создаст их. Если вы пытаетесь получить ярлыки, лучше сделать это в PROC DATASETS после этого шага (так как я не думаю, что метки будут применяться, если DUMMY уже существует).

0
data TEST; 
    attrib SUBJID length=$20 label="Subject ID" 
     NAME length=$20 label="Name" 
     AGE  length=8 label="Age"; 
    %sysfunc(ifc(%sysfunc(exist(DUMMY)), set DUMMY, stop)); 
run; 
Смежные вопросы