2013-06-28 40 views
1

我想使用PUT語句創建動態代碼。據SUGI 29(http://www2.sas.com/proceedings/sugi29/175-29.pdf)這個文件,SAS:使用Put語句創建動態代碼

put 
"data XXXXX; " 
/'infile "&datadir/&compid&filetype" missover ls=' tbla_fle 
';'/'input' 
; 

相當於跑步

data onecomp ; 
infile 
"&datadir/&compid&filetype" 
missover ls = 268 ; 
input 

然而,當我嘗試類似的東西來他們的榜樣,封閉在PUT語句的代碼不運行,轉而寫入SAS輸出日誌:

data _NULL_; 
put // "data put_test;"/"b=2;"/"run;"; 
run; 

In Output Log: 

data put_test; 
b=2; 
run;  

我檢查了SAS文件,它似乎是PUT僅用於「將行寫入SAS日誌,SAS輸出窗口或最近FILE語句中指定的外部位置」。它沒有說它可以用來創建動態生成的代碼。

我知道我必須錯過一些東西,但我不確定是什麼。我正在使用SAS Enterprise Guide 4.1。

謝謝!

回答

2

想法是使用put將生成的代碼寫入文件。然後將%include文件放入SAS會話中運行。你缺少的是file聲明和%include指令。

data _null_; 
    file 'temp.sas'; /* redirects put to a file instead of the SAS log */ 
    put 
     "data XXXXX; " 
    /'infile "&datadir/&compid&filetype" missover ls=' tbla_fle 
     ';'/'input' 
    ; 
run; 

%include 'temp.sas';