我真的不知道如何表达我的问题,但它就在这里。即使输入数据集丢失或不存在,我想知道是否可以在 SAS 中创建所需的数据集。
因此,如果您查看下面的代码,即使虚拟输入数据集不存在,我也想创建具有指定属性的测试数据集。这可能吗?
提前致谢。
Data test;
set dummy;
label subjid = "Subject ID"
name = "Name"
age = "Age";
Run;
我真的不知道如何表达我的问题,但它就在这里。即使输入数据集丢失或不存在,我想知道是否可以在 SAS 中创建所需的数据集。
因此,如果您查看下面的代码,即使虚拟输入数据集不存在,我也想创建具有指定属性的测试数据集。这可能吗?
提前致谢。
Data test;
set dummy;
label subjid = "Subject ID"
name = "Name"
age = "Age";
Run;
检查数据集是否存在,如果存在则运行数据步骤,如果不存在则创建一个空数据集。首先创建一个空版本的虚拟数据集可能更容易,然后根据第一个是否存在从一个或另一个读取。
%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);
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 已经存在,我认为不会应用标签)。
基思的回答很好。创建测试表的另一种方法:
proc sql;
create table test
( subjid char(20) label="Subject ID"
,name char(20) label="Name"
,age num label="Age"
);
quit;
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;