我真的不知道如何說出我的問題,但它在這裏。我想知道SAS中是否有可能創建所需的數據集,即使輸入數據集丟失或不存在。SAS - 創建一個數據集,無論輸入數據集如何
因此,如果您看下面的代碼,我想創建具有指定屬性的測試數據集,即使虛擬輸入數據集不存在。這可能嗎?
在此先感謝。
Data test;
set dummy;
label subjid = "Subject ID"
name = "Name"
age = "Age";
Run;
我真的不知道如何說出我的問題,但它在這裏。我想知道SAS中是否有可能創建所需的數據集,即使輸入數據集丟失或不存在。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);
Keith的回答是一個很好的答案。創建測試表的另一種方法:
proc sql;
create table test
(subjid char(20) label="Subject ID"
,name char(20) label="Name"
,age num label="Age"
);
quit;
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已存在,我不認爲會應用這些標籤)。
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;
嗨基思 - 認爲attrib語句需要在第一個測試條件以及,如果我正確地閱讀OP。 – 2013-03-08 16:03:56