SAS保留特定变量供以后使用

时间:2015-02-23 02:31:34

标签: sas

我试图计算一系列值,每个值都基于它之后的值。例如,第10行中的变量A用于计算第9行中的变量B,第10行中的变量A和第9行中的变量B用于计算第8行中的变量C等。是否有一种好的方法可以做到这一点?每行都有一个标记它的字符变量/名称。我已尝试使用此代码的retain语句,但未保留该特定值:

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

请注意,null变量是通用的,可能有多个。如果我们有这样的输出(但首先是首选)也没关系:

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

1 个答案:

答案 0 :(得分:-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;