[程式] SAS利用巨集水平合併多個檔
--------------------------------------------------------------------
[軟體程式類別]:
SAS9.3
[程式問題]:
資料處理
[軟體熟悉度]:
中(3個月到1年)
[問題敘述]:
目前我有五年份的檔案(DBF檔),數量大約一千多個,每個檔案以日期命名,
因為不是每一天都有檔案所以數字並不連續。
每一個檔案內都只有一個變數RASTERVALU
例如一月份檔名:TX2007JAN1、TX2007JAN3、TX2007JAN11、TX2007JAN15...
我想用macro將所有的檔案讀入,修改變數名稱(改為日期)再合併。
由於檔名的數字不連續,所以結果會將原本沒有的檔案也建立在資料庫,
使用merge在合併時就發生沒有讀取到變數而發生錯誤不能合併。
在版上看過有人寫 PROC DATASET 的巨集來做,
雖然之後試了force option有強制併在一起但是除了共同欄位外其餘都成了缺失值。
所有程式語法如下。
因為我第一次試寫macro語法,估勾很久還是不知道如何解決,還請版友指教。
謝謝大家^^
[程式範例]:
%macro import (n);
%Do i=1 %to &n;
PROC IMPORT OUT= WORK.temp2007JAN&i
DATAFILE= "D:\test\ck0701&i"
DBMS=DBF REPLACE;
GETDELETED=NO;
RUN;
data TX2007JAN&i;
set temp2007JAN&i;
keep post_code RASTERVALU;
if RASTERVALU>0 then TX2007JAN&i=RASTERVALU;
run;
data A.TX2007JAN&i;
set TX2007JAN&i;
TX2007JAN&i=RASTERVALU;
drop RASTERVALU;
run;
%end;
%mend;
%import (28);
-------------------------------------------------------
%macro merge ;
PROC DATASETS library=A; RUN;
%do i=1 %to 28;
proc sort data=TX2007JAN&i; by post_code;
PROC DATASETS; APPEND out =tm data=TX2007JAN&i force;
RUN;
%end;
%mend merge ;
%merge by post_code;
-----------------------------------------------------------------------------
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.128.68.1
※ 文章網址: https://www.ptt.cc/bbs/Statistics/M.1421123717.A.877.html
討論串 (同標題文章)
以下文章回應了本文 (最舊先):
完整討論串 (本文為第 1 之 4 篇):