Re: [程式] SAS 相關問題!!
相當具有挑戰性的問題,原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://www.ptt.cc/bbs/Statistics/M.1432413812.A.C3C.html
推
05/24 11:34, , 1F
05/24 11:34, 1F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):