7

次の観察結果を持つ「入力」というデータセットがあります

ID 給与
10 1000
20 2000
30 3000
40 4000

次の観測結果を含む出力データセットが必要です

ID 給与 Next_row_Salary
10 1000 2000
20 2000 3000
30 3000 4000
40 4000 null

注: シナリオでは、次の監視の給与は、列 Next_Row_salary の現在の監視の値である必要があります。次の観察がない場合、列 Next_Row_salary の現在の観察の値は「null」である必要があります。

このシナリオの SAS コードの作成を手伝ってください。

4

3 に答える 3

19

これを達成するにはいくつかの方法があります。

data have;
   input ID Salary;
   cards;
10 1000
20 2000
30 3000
40 4000
;
run;

data want;
   recno=_n_+1;
   set have end=last;
   if not last 
           then set have (keep=salary rename=(salary=next_row_salary)) point=recno;
      else call missing(next_row_salary);
run;
于 2012-07-20T13:20:07.533 に答える
2

データ ステップでこれを行う直接的な方法はありません。使用できるアプローチは 2 つあります。

オプション 1: 逆順に並べ替え、lag 関数を使用する

proc sort data=your_dataset;
 by descending id;
run;

data your_dataset;
 set your_dataset;
 next_row_salary = lag(salary);
run;

proc sort; by id; run;

オプション 2: 使用proc expand

proc expand data=your_dataset method=none;
 by id;
 convert salary = next_row_salary / transformout=(lead 1);
run;
于 2012-07-20T13:16:49.057 に答える