0

たとえば、次のように、反復して線形関数を適用するさまざまなレイテンシに関するデータがあります(関数はここでは単なる例です)

data latency;
input lat1 - lat20;
array cost[20];
array lat[20];
do x = 1 to 20;
cost[x] = lat[x] * 1.875;
end;
drop x;
datalines;
0.42 0.85 0.59 0.06 0.21 0.35 0.1 0.08 0.85 0.53 0.81 0.44 0.47 0.2 0.99 0.32 0.18 0.87 0.33 0.84
0.11 0.83 0.02 0.59 0.74 0.65 0.76 0.45 0.57 0.22 0.2 0.13 0.42 0.15 0.05 0.51 0.48 0.95 0.39 0.92
0.8 0.9 0.65 0.29 0.77 0.0 0.24 0.05 0.16 0.72 0.58 0.9 0.35 0.63 0.79 0.41 0.73 0.36 0.82 0.16
0.74 0.21 0.57 0.73 0.83 0.78 0.77 0.92 0.13 0.39 0.52 0.14 0.1 0.77 0.68 0.99 0.26 0.37 0.97 0.83
;
run;

ループの各反復で現在の観測数を使用して変数を保存し、後で計算に使用できるようにするにはどうすればよいですか?

proc print観測番号が自動的に出力されることはわかっていますが、これにアクセスしてデータステップの変数に保存するにはどうすればよいですか?sasがデータラインを1行ずつ読み取るときにこれを行う方法はありますか?

これを試しましたが、obsすべての観測値の変数は2です。

data latency;
input lat1 - lat20;
obs = 1;                 * ADDED LINE;
array cost[20];
array lat[20];
do x = 1 to 20;
cost[x] = lat[x] * 1.875;
end;
obs = obs + 1;           * ADDED LINE;
drop x;
datalines;
0.42 0.85 0.59 0.06 0.21 0.35 0.1 0.08 0.85 0.53 0.81 0.44 0.47 0.2 0.99 0.32 0.18 0.87 0.33 0.84
0.11 0.83 0.02 0.59 0.74 0.65 0.76 0.45 0.57 0.22 0.2 0.13 0.42 0.15 0.05 0.51 0.48 0.95 0.39 0.92
0.8 0.9 0.65 0.29 0.77 0.0 0.24 0.05 0.16 0.72 0.58 0.9 0.35 0.63 0.79 0.41 0.73 0.36 0.82 0.16
0.74 0.21 0.57 0.73 0.83 0.78 0.77 0.92 0.13 0.39 0.52 0.14 0.1 0.77 0.68 0.99 0.26 0.37 0.97 0.83
;
run;

proc print data=latency;
run;

これは小さな例ですが、実際には、各データ行の先頭に行番号を格納する新しい変数を追加して読み込むことはできません。これは、実際のデータセットでは実用的ではありません。

4

2 に答える 2

2

新しい観測のたびにretainSASが0にリセットされないように、ステートメントを追加する必要があります。obs

data latency;
retain obs 0;
obs = obs + 1;
...
run;
于 2012-10-25T17:30:54.660 に答える
1

あなたの最初の試みは非常に近かった。もう一度やり直してください。ただし、今回は次の行を置き換えます。

obs = 1;                 * ADDED LINE;

これとともに:

retain obs 0;            * ADDED LINE;

そうobsすれば、変数は毎回1にリセットされるのではなく、データセット全体で保持されます。

于 2012-10-25T17:35:50.290 に答える