2015-05-03 71 views
0

我有一個SAS數據集,如下所示。我想使用第一列值作爲被減數,它是第2列 - 第1列,第3列 - 第1列,第4列 - 第1列......在SAS中執行此差異的最有效方法是哪種?使用數組或做循環?執行SAS列之間差異的最有效方法

hotelID expense1 expense2 expense3 expense4 expense5 
1   41241  56234  45124  12551  74245 
2   31232  45213  51411  67432  23523 
3   75463  14352  74214  51541  25236 
4   95324  21451  73423  15215  56432 
5   12445  64622  12156  52442  52351 
6   43542  24141  62532  63255  78454 
7   12625  14525  45235  15351  15364 
+0

要找到最有效的(CPU時間?),你可能想嘗試不同的方法,並確定其經驗。也許是循環(循環數組)與4賦值語句,轉換爲規範化格式,並使用BY組處理來保留first.expense作爲被減數。 – Quentin

+1

有了這樣一個簡單的計算,我懷疑磁盤I/O而不是CPU將成爲限制因素,所以方法的選擇不會有太大的區別,假設它在一個數據步驟內運行。我會選擇數組選項,主要是爲了獲得整潔的代碼。 – user667489

+0

@ user667489,你可以給我代碼如何做到這一點? – user3525837

回答

1

使用arrays像下面

data _NULL_; 
set test; 
array all{*} expense2-expense5; 
array diff{*} diff_exp2-diff_exp5; 
do i=1 to dim(all); 
diff[i]= expense1 - all{i}; 
end; 
put _ALL_; 
run;