Reputation: 91
I dont really know how to word my question but here it goes. I would like to find out if it is possible in SAS to create the desired dataset even if the input dataset is missing or doesnt exist.
So if you look at the code below, I want to create the test dataset with the specified attributes even if the dummy input dataset does not exist. Is this possible?
Thanks in advance.
Data test;
set dummy;
label subjid = "Subject ID"
name = "Name"
age = "Age";
Run;
Upvotes: 3
Views: 6381
Reputation: 11
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;
Upvotes: 0
Reputation: 63424
PROC APPEND is another solution here. You do need to define your variable lengths and/or formats.
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;
This will append zero rows to Dummy, and create it if needed. If you're trying to get the labels in, the better way is to do that in PROC DATASETS after this step (as I don't think the labels would be applied if DUMMY already exists).
Upvotes: 1
Reputation: 12691
Keith's answer is a good one. An alternative method for creating the test table:
proc sql;
create table test
( subjid char(20) label="Subject ID"
,name char(20) label="Name"
,age num label="Age"
);
quit;
Upvotes: 0
Reputation: 7602
Check if the dataset exists, if it does then run the data step, if not then create an empty dataset. It may be easier to create an empty version of the dummy dataset first, then read from one or the other depending if the first one exists.
%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);
Upvotes: 3