作者chien533 (谣指部总司令)
站内Statistics
标题Re: [问题] SAS 相关问题!!
时间Sun May 24 04:43:30 2015
相当具有挑战性的问题,原po刚发文那一天我试着写,但解决不了
不过搁了几天今天突然灵光乍现就解出来了
首先考虑多重ID的范例资料:
data temp;
input ID OBS LONG;
cards;
1101 1 0
1101 2 0
1101 3 0
1101 4 1
1101 5 1
1101 6 1
1101 7 1
1101 8 0
1101 9 0
1101 10 0
1101 11 1
1101 12 1
1101 13 1
1101 14 1
1102 1 0
1102 2 0
1102 3 0
1102 4 1
1102 5 1
1102 6 1
1102 7 1
1102 8 0
1102 9 0
1102 10 0
1102 11 1
1102 12 1
1102 13 1
1102 14 1
;
程式的关键点是要SAS确定0->1或1->0的位置,所以用一个lag来处理
data temp1;
set temp;
by id;
lag1 = lag(long);
但由於取lag後ID=1101的最後一个值会跑到ID=1102的第一个值
所以要让所有obs=1变成missing
if obs = 1 then lag1 = .;
然後设定一个新的变数change让lag1不等於long时为1,其余为0,因此这个change可以抓出
long数值变化时的位置
if lag1 ne . then change = (long ne lag1);
最後再用传统垂直累加数值的方法把change累加起来存成一个新变数inout
if first.id then inout = 0;
inout + change;
run;
最後这个inout变数就是原po要的进出次数了!
※ 引述《komol (科摩)》之铭言:
: 资料如下:
: (想要计算的变数)
: ID OBS LONG 进出次数
: 1101 1 0 0
: 1101 2 0 0
: 1101 3 0 0
: 1101 4 1 1
: 1101 5 1 1
: 1101 6 1 1
: 1101 7 1 1
: 1101 8 0 2
: 1101 9 0 2
: 1101 10 0 2
: 1101 11 1 3
: 1101 12 1 3
: 1101 13 1 3
: 1101 14 1 3
: 小弟想要计算第四个变数 "进出次数" (每个观察值都要标示进出次数(第几次))
: 谢谢
: 感恩
: 如果是跟统计软体有关请重发文章。
: 如果跟论文有关也烦请您重发文章。
: 请详述问题内容,以利板友帮忙解答,过短文章依板规处置,请注意。
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 72.191.32.43
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Statistics/M.1432413812.A.C3C.html
1F:推 komol: 这个问题困扰我好久了! 超强者 感谢解决!!:) 05/24 11:34