2015-02-23 120 views
0

我試圖計算一系列基於後面的值的值。例如,第10行中的變量A用於計算第9行中的變量B,第10行中的變量A以及第9行中的變量B用於計算第8行中的變量C等。是否有一種很好的方法可以做到這一點?每行都有一個字符變量/名稱來標記它。我已經嘗試使用此代碼保留聲明,但不保留特定值:SAS保留特定變量供以後使用

data null; 
set oldData; 
if name = 'Jimmy' then do; 
    variableA = variableNull1 + variableNull2; 
    retain variableA; 
end; 
if name = 'Johnny' then do; 
    variableB = variable A + variableNull3; 
    retain variableB; 
end; 
if name = 'Bobby' then do; 
    variableC = variableA + variable B + variableNull4; 
    retain variableC; 
end; 
(continue process for a few more lines) 
run; 

另一個想法是,如果我可以隨便填上下每個變量,這也將正常工作。謝謝大家的幫助。

所需的輸出是:

Jimmy  VariableNull3         VariableC 
Johnny VariableNull2     VariableB 
Bobby  VariableNull1  VariableA 

注意,空的變量是通用的,可能有多個。如果我們有這樣的輸出也是可以的(但首選是這樣的):

Jimmy  VariableNull3  VariableA  VariableB   VariableC 
Johnny VariableNull2  VariableA  VariableB   VariableC 
Bobby  VariableNull1  VariableA  VariableB   VariableC 
+1

您可以發佈輸入數據集和所需的輸出示例嗎? – NEOmen 2015-02-23 02:57:37

+0

@NeOmen我剛剛添加了兩個輸出,可以和我在一起。謝謝! – Code4Days 2015-02-23 03:09:37

+0

你可以發佈樣本輸入嗎? – NEOmen 2015-02-23 03:11:49

回答

-1

請提供樣本數據以闡明您究竟是什麼。

/* fake data */ 
data sample; 
do i = 1 to 10; 
VariableNULL1 = rand("Uniform"); 
VariableNULL2 = VariableNULL1 * 1.02; 
VariableNULL3 = 0.55 * VariableNULL2 + 0.35; 
VariableNULL4 = VariableNULL3 + 0.2; 
output; 
end; 
drop i; 
run; 

/* Everytime you get VarA first, then based on that you have VarB and so on. Retain statement will keep the previous record */ 
data sample2; 
set sample; 
/* retain previous values */ 
retain prev1-prev2; 
VariableA = sum(of VariableNULL1-VariableNULL2); /* VarA is based on VarNULLs */ 
VariableB = prev1 + VariableNULL3; /* VarB is derived from previous VarA */ 
VariableC = prev2 + VariableNULL3 + VariableNULL4; 
prev2 = prev1; 
prev1 = VariableA; 
drop prev:; /* it will be more clear to you if you keep prev1 & prev2 in output dataset. It shows how SAS calculate VarB and VarC */ 
run; 
+0

請在回答中張貼更多的代碼 - 事實上,非代碼解釋比代碼更重要。解釋你的解決方案如何解決問題,所以我們教程序員去釣魚,而不是簡單地給他們一條魚。 – Joe 2015-02-23 15:40:27