2017-02-17 114 views
2

一個文件名,我有一個編號命名的SAS monthend數據集如下:SAS設置語句中使用冒號和創建因此,使用SAS變量

mydata_201501 
mydata_201602 
mydata_201603 
mydata_201604 
mydata_201605 
... 
mydata_201612 

每個人都有帳戶,特別monthend信息。我想用冒號,而不是寫出來的全套聲明如下的數據集堆全部納入一個數據集:

data mynewdata; 
set mydata_:; 
run; 

然而有數據集內沒有郵戳的變量,所以當我堆疊起來我會失去monthend信息爲每個帳戶。我想知道哪一行是指每個帳戶的哪一個monthend。有沒有一種方法可以自動創建一個變量來命名錶格行來自哪裏。例如漫長的方式將是這樣的:

data mynewdata; 
set mydata_201501 (in=a) mydata_201502 (in=b) mydata_201503 (in=c)...; 
if a then tablename = 'mydata_201501'; 
if b then tablename = 'mydata_201502'; 
if c... 
run; 

但有沒有更快的方式使用冒號沿着這些線?

data mynewdata; 
set mydata_:; 
tablename = _tablelabel_; 
run; 

感謝

+0

它會出現,這是你在找什麼:http://support.sas.com/documentation/cdl/ en/lrdict/64316/HTML/default/viewer.htm#a000173782.htm#a003181060 – mjsqu

回答

2

我總是發現點擊惱人的評論鏈接,所以希望這裏是在上下文答案。使用INDSNAME= SET語句選項的數據集名稱分配給一個變量:

data mynewdata; 
    set mydata_: indsname=_tablelabel_; 
    tablename = _tablelabel_; 
run; 

注:你可以撥打_tablelabel_任何你想要的,你可能希望改變它,所以它不會看起來像一個SAS生成的變量名稱

INDSNAME=只成了版本SAS SET語句選項9.2

+0

這太棒了 - 一個完美的解決方案。非常感謝。 – Tammboy

1

只是要清楚,用我特定的代碼,其中的數據集被命名爲mydata_yyyymm,我想用日戳一個monthend變量,我是能夠生產這種使用mjsqu提供的解決方案如下(如果需要提供OB和保持語句):

data mynewdata; 
    set mydata_: (obs=100 keep=xxx xxx) indsname=_tablelabel_; 
    format monthend yymmdd10.; 
    monthend = input(scan(_tablelabel_,-1,'_'),yymmn6.); 
run;