1

1 人あたり 4 つの観測 (行) を持つデータセットがあります。

2 行目と 1 行目、3 行目と 2 行目、4 行目と 3 行目の差を計算する 3 つの新しい変数を作成したいと考えています。

保持はこれを行うことができると思いますが、方法がわかりません。

それとも配列が必要ですか?

ありがとう!

4

5 に答える 5

0
data output_data;   
   retain count previous_value diff1 diff2 diff3;  
   set data input_data    
     by person;  
   if first.person then do;   
     count = 0;  
   end;  
   else do;  
     count = count + 1;  
     if count = 1 then diff1 = abs(value - previous_value);  
     if count = 2 then diff2 = abs(value - previous_value);  
     if count = 3 then do;   
       diff3 = abs(value - previous_value);   
       output output_data;   
     end;  
   end;  
   previous_value = value;  
run;
于 2009-09-29T04:46:44.140 に答える
0

代わりに dif() 関数を使用しないのはなぜですか?

/* test data */
data one;
  do id = 1 to 2;
    do v = 1 to 4 by 1;
      output;
    end;
  end;
run;
/* check */
proc print data=one;
run;
/* on lst
Obs    id    v

 1      1    1
 2      1    2
 3      1    3
 4      1    4
 5      2    1
 6      2    2
 7      2    3
 8      2    4
*/

/* now create diff within id */
data two;
  set one;
  by id notsorted; /* assuming already in order */
  dif = ifn(first.id, ., dif(v));
run;
proc print data=two;
run;
/* on lst
Obs    id    v    dif
 1      1    1     .
 2      1    2     1
 3      1    3     1
 4      1    4     1
 5      2    1     .
 6      2    2     1
 7      2    3     1
 8      2    4     1
*/
于 2009-08-20T18:21:54.670 に答える