看板 Statistics 關於我們 聯絡資訊
※ 引述《liton (歐吉桑留學生)》之銘言: : 幫朋友想些SAS的程式該如何寫 : 目前有個data set(source) : 共6個欄位 (i,j,k,l,m,n 數字整數格式 已經由小到大排列) : 想篩選出以下條件的資料 : (1).二個3連, : 例, 2,3,4+11,12,13 : (2).三個2連, : 例, 11,12+22,23+35,36 : (3).3單連+3偶連, : 例, 3,5,7+12,14,16 : (4).2單連+2單連+2偶連或2單連+2偶連+2偶連的組合, : 例, 3,5+11,13+30,32或2,4+10,12+33,35 : 我有想過用array寫 : 但是array還是逃不出要指定哪些欄位符合條件 : 例如第一題中 我必須程式中有寫到k-j, j-i : 但是這樣的解題方法到了第二題之後只會撞牆 : 不知道有啥比較好的解法呢? (2) data aa; set aa; a1=j-i; a2=k-j; a3=l-k; a4=m-l; a5=n-m; if a1^=1 then a1=0; if a2^=1 then a2=0; if a3^=1 then a3=0; if a4^=1 then a4=0; if a5^=1 then a5=0; data bb; set aa; if a1=1 and a2=0 and a3=1 and a4=0 and a5=1 then output; keep i j k l m n; run; 三個2連,所以a1-a5應該要 [1 0 1 0 1] 的樣子才滿足 (3) data aa; set aa; b1=j-i; b2=k-j; b3=m-l; b4=n-m; if b1^=2 then b1=0; if b2^=2 then b2=0; if b3^=2 then b3=0; if b4^=2 then b4=0; b5=k/2; b6=ceil(b5); if b5^=b6 then b7=1 ; else b7=0; *b7=1 k為奇數*; b8=l/2; b9=ceil(b8); if b8=b9 then b10=1 ; else b10=0; *b10=1 l為偶數*; data cc; set aa; if b1=2 and b2=2 and b3=2 and b4=2 and b7=1 and b10=1 then output; keep i j k l m n; run; 3單連+3偶連 所以b1-b4應該是 [2 2 2 2] 的樣子才滿足 另外要驗證前三個是奇數 後三個是偶數 (只要三個裡面有一個滿足可以,不然b1-b4不會滿足 [2 2 2 2] ) 因為不知道SAS有沒有直接看是不是奇數偶數的函數 所以小繞了一圈 (4) data dd; set aa; a1=j-i; a2=k-j; a3=l-k; a4=n-m; if a1^=2 then a1=0; if a2^=2 then a2=0; if a3^=2 then a3=0; if a4^=2 then a4=0; b1=j/2; b2=ceil(b1); if b1^=b2 then b3=1 ; else b3=0; *b3=1 j為奇數*; b4=l/2; b5=ceil(b4); if b4^=b5 then b6=1 ; else b6=0; *b6=1 k為奇數*; b7=n/2; b8=ceil(b7); if b7=b8 then b9=1 ; else b9=0; *b9=1 l為偶數*; if a1=2 and a2=0 and a3=2 and a4=2 and b3=1 and b6=1 and b9=1 then output; keep i j k l m n; data ee; set aa; a1=j-i; a2=l-k; a3=m-l; a4=n-m; if a1^=2 then a1=0; if a2^=2 then a2=0; if a3^=2 then a3=0; if a4^=2 then a4=0; b1=j/2; b2=ceil(b1); if b1^=b2 then b3=1 ; else b3=0; *b3=1 j為奇數*; b4=l/2; b5=ceil(b4); if b4=b5 then b6=1 ; else b6=0; *b6=1 k為偶數*; b7=n/2; b8=ceil(b7); if b7=b8 then b9=1 ; else b9=0; *b9=1 n為偶數*; if a1=2 and a2=2 and a3=0 and a4=2 and b3=1 and b6=1 and b9=1 then output; keep i j k l m n; data ff; set dd ee; run; 2單連+2單連+2偶連 跟 2單連+2偶連+2偶連 分開做在合併 邏輯跟上面大同小異 沒有data可以檢查寫的對不對, 也許有小錯誤在裡面,或是沒考慮周全的 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.119.145.80 ※ 編輯: MmmRrrrX 來自: 140.119.145.80 (04/07 05:03) ※ 編輯: MmmRrrrX 來自: 140.119.145.80 (04/07 13:40)