看板 Statistics 關於我們 聯絡資訊
※ 引述《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
eva02:謝謝:D 02/15 23:37