我真的不知道怎么说出我的问题,但现在就说了。我想知道即使输入数据集丢失或不存在,SAS是否有可能创建所需的数据集。
因此,如果您查看下面的代码,我想创建具有指定属性的测试数据集,即使虚拟输入数据集不存在也是如此。这可能吗?
提前致谢。
Data test;
set dummy;
label subjid = "Subject ID"
name = "Name"
age = "Age";
Run;
答案 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;