推 eva02:謝謝:D 02/15 23:37
※ 引述《eva02 ()》之銘言:
: [軟體程式類別]:SAS
: [程式問題]:資料處理
: [軟體熟悉度]:
: 低(1~3個月)
: [問題敘述]:
: 要將各公司的資料set到單一資料裡計算平均值,
: 已經寫macro call symput資料名稱了,
: 可是不知道怎麼在迴圈裡將他們set到單一資料中。
: [程式範例]:
: %macro table1(t);
: %do i=1 %to &t;
: data _null_;
: set tmp1.xxx;
: if _n_=&i then do;
: call symput('cc',個別公司檔名)
: end;
: run;
: /*這邊開始是參考網路上的寫法,
: 可是我這樣插入只會在all_table裡放進t次同一間公司的資料而已,
: 而且迴圈只跑一次就停了*/
: data all_table;
: set %do i=1 %to &t;
: &cc
: %end;;
1. 外面那層do 已經用i 了 這邊請改用別的參數
2. 由於這邊被包在裡面, 當外面i=1時, &cc 是 _n_ = 1的資料
這樣寫就等同於你的all_table set t 次 _n_ = 1 的資料, 所以會錯
3. 當外面i=2時, &cc 是 _n_ = 2 的資料
此時all_table是set t 次過後 _n_ = 1 的資料, 但是你在這又覆蓋她
所以all_table變成set t 次 _n_ = 2 的結果...
依此類推, 你這種寫法會導致你set t 次 _n_ = &t 的資料
: %end;
: %mend table1;
: 謝謝:)
我的寫法, 請在macro 外面先把你 all_table 建好, 可以利用attrib 建立應有的變數
然後比第二段刪掉改成 proc append base = all_table data = &cc;run;
參考看看~
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 123.194.131.25