3

我真的不知道如何表达我的问题,但它就在这里。即使输入数据集丢失或不存在,我想知道是否可以在 SAS 中创建所需的数据集。

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

提前致谢。

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

4 回答 4

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);
于 2013-03-08T15:35:51.520 回答
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 已经存在,我认为不会应用标签)。

于 2013-03-08T16:47:21.600 回答
0

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

proc sql;
create table test 
    ( subjid char(20) label="Subject ID" 
        ,name char(20) label="Name"
        ,age num label="Age"
    );
quit;
于 2013-03-08T16:02:16.503 回答
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;
于 2013-12-07T09:33:06.827 回答