看板 Statistics 關於我們 聯絡資訊
data test; input a b; cards; 2 3 5 2 3 9 8 2 ; data a; set test; retain c 0; if _n_>=2 then c=a+b+c; run; 這樣就好了 XD ※ 引述《YcSJM (挖喜SJM)》之銘言: : ※ 引述《YcSJM (挖喜SJM)》之銘言: : : 想請教一個SAS資料處理的問題 : : 如果現在資料是這樣 : : a b c : : ---------- : : 2 3 0 : : 5 2 . : : 3 9 . : : 8 2 . : : c 從第二個開始想要是 a的第2個 + b的第2個 + c的第1個 : : c 的第三個類推下去是 a的第3個 + b的第3個 + c的第2個 : : 這樣程式改怎麼寫 : : 推 kenshin528:我覺得用IML或EXCEL做比較簡單 04/01 15:45 : : 推 wlsherica:excel+1 04/01 17:12 : : 推 tew:retain c 0; if _n_>=2 then c=a+b+c; 結束 04/01 17:31 : : 推 tew:如果資料筆數是100000筆 SAS還是比較簡單一點 XD 04/01 18:32 : : 推 wlsherica:請問_n_是甚麼呢??????? 04/01 21:50 : 感謝版主及版友的回答 : 因為資料有上千筆 而同樣的動作要重複好幾百次 : 上面的問題只是將問題簡單化而已 : 所以不考慮用excel做 : 試了版主的方法試了好幾次都沒辦法成功 : 後來改用iml處理 : 將處理的方法提供給以後有需要的版友參考看看 : 只是iml不是很熟 : 也許會有些多餘或者沒效率 : data test; : input a b; : cards; : 2 3 : 5 2 : 3 9 : 8 2 : ; : proc iml ; : use test; : read all var {a} into a; read all var {b} into b; : n=nrow(a); : c=j(n,1,0); : do j=2 to n; : c[j,1]=a[j,1]+b[j,1]+c[j-1,1]; : end; : create test1 var{a b c}; : append; : quit; -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 125.225.32.225
west1996:這樣子每讀一筆data就會重新assign c=0喔 code順序要換 04/05 20:34
west1996:一下 04/05 20:35
tew:retain 的意思應該不是你說的這樣吧 04/05 23:59
tew:retain c 0只是將C變項設起始值為0 保留給下一個觀察值用 04/06 00:00
tew:不會每次都設0 04/06 00:00
tew:或者是 長期以來 我誤解這個語法 OTL 04/06 00:16
west1996:恩 剛剛試了一下 是我誤解了XD 04/06 10:42