SAS - 无论输入数据集如何,都创建数据集

时间:2013-03-08 14:12:07

标签: sas

我真的不知道怎么说出我的问题,但现在就说了。我想知道即使输入数据集丢失或不存在,SAS是否有可能创建所需的数据集。

因此,如果您查看下面的代码,我想创建具有指定属性的测试数据集,即使虚拟输入数据集不存在也是如此。这可能吗?

提前致谢。

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

4 个答案:

答案 0 :(得分: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);

答案 1 :(得分: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,则不会应用标签)。

答案 2 :(得分:0)

基思的答案很好。另一种创建测试表的方法:

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

答案 3 :(得分: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;