2013-03-08 43 views
3

我真的不知道如何說出我的問題,但它在這裏。我想知道SAS中是否有可能創建所需的數據集,即使輸入數據集丟失或不存在。SAS - 創建一個數據集,無論輸入數據集如何

因此,如果您看下面的代碼,我想創建具有指定屬性的測試數據集,即使虛擬輸入數據集不存在。這可能嗎?

在此先感謝。

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

回答

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); 
+0

嗨基思 - 認爲attrib語句需要在第一個測試條件以及,如果我正確地閱讀OP。 – 2013-03-08 16:03:56

0

Keith的回答是一個很好的答案。創建測試表的另一種方法:

proc sql; 
create table test 
    (subjid char(20) label="Subject ID" 
     ,name char(20) label="Name" 
     ,age num label="Age" 
    ); 
quit; 
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已存在,我不認爲會應用這些標籤)。

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; 
相關問題