作者realtemper (\愛衣醬大*勝*利/)
看板Statistics
標題Re: [問題] SAS 矩陣概念相對位置相加
時間Sat Jun 27 14:38:05 2015
※ 引述《sheiswe (no matter)》之銘言:
恕刪
你的問題不難,只要找出「斜對角的那筆資料」在哪個 obs
然後再利用 point= 這個 set statement option 把它抓進來
(當然,抓進來的時候需要重命名,以避免衝突)
事情就解決了
假設資料是 5*5 的話,#obs 跟 (#_name, #id) 的對應關係如下
(# means "number of")
#obs = (#_name_ - 1) * 5 + #id
完整測試程式碼如下
你可自行把把 data want(keep=) 的變數拿掉,看看是不是抓到了正確的資料。
data a;
input Id $ _name_ $ j i;
cards;
X001 X001 12000 500
X002 X001 0 200
X003 X001 100 300
X004 X001 100 23
X005 X001 5000 333
X001 X002 101 532
X002 X002 0 863
X003 X002 705 101
X004 X002 305 201
X005 X002 505 103
X001 X003 101 532
X002 X003 0 863
X003 X003 405 101
X004 X003 405 201
X005 X003 525 103
X001 X004 121 532
X002 X004 0 863
X003 X004 705 101
X004 X004 305 201
X005 X004 505 103
X001 X005 101 532
X002 X005 0 863
X003 X005 705 101
X004 X005 305 201
X005 X005 505 103
;
run;
data want(keep=Id _name_ j i);
set a;
* obtain matrix subscripts;
n_id = input(substr(ID, 2, 3), 3.);
n_name = input(substr(_name_, 2, 3), 3.);
* find #obs required for adding by
corresponding (n_id, n_name) = (n_name, n_id);
pt = (n_id - 1) * 5 + n_name;
* read;
set a(rename=(id=id2 _name_=_name_2 j=j2 i=i2)) point=pt;
j = j + j2;
i = i + i2;
run;
* check;
proc print;
run;
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.27.14.9
※ 文章網址: https://www.ptt.cc/bbs/Statistics/M.1435387101.A.5BC.html
※ 編輯: realtemper (114.27.14.9), 06/27/2015 14:43:32
推 sheiswe: 愛大,你說的指令我都還沒機會用到過,馬上來試試~真謝謝 06/29 10:51
推 sheiswe: 試出來了~感謝大大講解得這麼詳細^^ 06/30 12:59
→ realtemper: 好說!不過真是令人無言的稱呼啊....從此不用宅暱稱QQ 06/30 20:44