我试图计算一系列值,每个值都基于它之后的值。例如,第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
答案 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;