例如,我有,我通過迭代,並適用於線性函數,如圖所示的各種延遲數據:(函數是這裏只是一個例子)如何在數據步驟的循環中引用當前行/觀察編號?
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
會自動打印觀察編號,但是如何訪問它並將其存儲到數據步驟中的變量?有沒有辦法做到這一點,薩斯一行一行地讀取數據?
我試過了,但對於每個觀察,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;
這是一個小例子,但在現實中,我不能簡單地添加存儲的行號到每個數據線的開始一個新的變量,並在閱讀它,這不是實際動手數據集。
或者,執行此操作:'數據延遲; obs + 1;'寫入沒有等於它會自動保留。 – Joe
@Joe但是,如果我在循環中添加了'obs = obs + 1',它只會取值20,40,60,80等。不應該爲每個變量增加一次'retain'語句,每個數據行,如果它在循環內? –
如果你把它放在循環中而不輸出它,你不會得到20個不同的值。 RETAIN與增量沒有任何關係 - 它只是說,當你點擊數據步進循環結束時不會清除數值。在你的情況下,你需要一個OUTPUT,如果你想每個值一行而不是每行20個值。我認爲你對你想要的東西不夠清楚 - 你收到的兩個答案都回答這個問題與我的閱讀方式略有不同,但我無法弄清楚你想要什麼。嘗試充實它,也許舉一個例子,如果它是正確的,它會是什麼樣子。 – Joe