推 alias:用macro ... 07/16 18:54
推 shinha70:請問可以寫詳細點嗎?我也遇到這個問題>"< 謝謝 07/17 00:05
推 cug:*.* 07/18 08:55
> -------------------------------------------------------------------------- <
作者: c6966 (窮人家的小孩) 看板: Statistics
標題: Re: [問題] SAS讀檔??
時間: Tue Jul 18 09:44:28 2006
※ 引述《hopper123 (clue)》之銘言:
: 請問SAS可以ㄧ次讀很多檔案進去嗎??
: 例如我有十個檔案(格式皆相同) A001 A002 A003....A010
: 我不想寫十遍Infile()
: 請問可以用其他方法讀嗎??
%macro(a,b);
%do i = 1 %to 10;
data &b;
infile 'c:\&a.txt';
%end;
%mend;
大概是這樣吧 手邊沒sas 沒辦法確實測試
不過曾經寫過大概是這樣
還是要有實際例子 哈哈
僅供參考
> -------------------------------------------------------------------------- <
作者: alias (希望) 看板: Statistics
標題: Re: [問題] SAS讀檔??
時間: Tue Jul 18 21:17:17 2006
※ 引述《hopper123 (clue)》之銘言:
: 請問SAS可以ㄧ次讀很多檔案進去嗎??
: 例如我有十個檔案(格式皆相同) A001 A002 A003....A010
: 我不想寫十遍Infile()
: 請問可以用其他方法讀嗎??
EX:
假設要讀的檔案名為 A001 A002 A003...A009 且有副檔名 .dat
(即完整檔名為A001.dat)
%MACRO aa;
%DO i=1 %TO 9;
DATA a00&i;
INFILE " c:\a00&i..dat";
INPUT (你的資料格式);
RUN ;
%END;
%MEND;
%aa;
大寫字母部份是必要的
小寫字母可以依自己需求變化
請注意黃色的符號,其中兩個點的地方: 第一個點是連接符號的意思
第二個點才是點
這有經過測試了, 如有錯誤還煩請訂正
這是我常用的方法, 當然我相信有其他更好的
但這樣缺點是 那個A010 不方便用 因為按上述程式
若i設到10 則檔名會變成 A0010 會找不到檔案讀的
(所以我才說會有其他更好的嘛 ^^)
> -------------------------------------------------------------------------- <
發信人: yhliu.bbs@bbs.wretch.cc (老怪物), 看板: Statistics
標 題: Re: [問題] SAS讀檔??
發信站: 無名小站 (Fri Jul 21 18:16:16 2006)
轉信站: ptt!Group.NCTU!grouppost!Group.NCTU!wretch
※ 引述《alias.bbs@ptt.cc (希望)》之銘言:
> ※ 引述《hopper123 (clue)》之銘言:
> : 請問SAS可以ㄧ次讀很多檔案進去嗎??
> : 例如我有十個檔案(格式皆相同) A001 A002 A003....A010
> : 我不想寫十遍Infile()
> : 請問可以用其他方法讀嗎??
*Macro PADZERO 在數字前補0, 使其長度固定.
%Macro PADZERO(number,digit);
%LET _l=%LENGTH(&&&number);
%IF &_l<&digit %THEN
%DO _j=&_l+1 %TO &digit;
%LET &number=0&&&number;
%END;
%MEND;
*以下取 alias 的 Macro 做修改.
%Macro RFILES(prefix,begno,endno,digits=0);
%IF &digits<1 %THEN
%LET digits=%LENGTH(&endno);
%DO i=&begno %TO &endno;
%PADZERO(&i,&digits);
%LET _fname=&prefix&i;
DATA &_fname;
INFILE "&Path&_fname..&Ext";
* Path 是檔案路徑, Ext 為延伸檔名, 呼叫此 macro
* 前設定之. 或如 alias 原 macro, 用固定字串亦可.
/*
(put your statements for data processing)
*/
RUN;
%END;
%MEND;
原問之讀檔:
%LET Path=C:\;
%LET Ext=dat;
%RFILES(A,1,10,digits=3)
未試. 有無錯誤不知.