作者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://webptt.com/cn.aspx?n=bbs/Statistics/M.1435387101.A.5BC.html
※ 编辑: realtemper (114.27.14.9), 06/27/2015 14:43:32
1F:推 sheiswe: 爱大,你说的指令我都还没机会用到过,马上来试试~真谢谢 06/29 10:51
2F:推 sheiswe: 试出来了~感谢大大讲解得这麽详细^^ 06/30 12:59
3F:→ realtemper: 好说!不过真是令人无言的称呼啊....从此不用宅昵称QQ 06/30 20:44