我有一个包含三列的数据集:Names,ColA和ColB。 每个名称都有许多行,对于每个名称,我需要从A中减去B,并使新列获得A和B之间差异的剩余值:
Names ColA ColB NewColA
x 100 5 95
x 100 20 75
x 100 10 65
这可能吗?我尝试过使用IF-Then语句,Do-While并考虑使用宏但我的脑子仍然处于Excel / VBA模式,所以我不知道该怎么做?
答案 0 :(得分:2)
您的问题非常类似于使用分组执行总计。 可以在此处找到一个示例:http://support.sas.com/kb/24/649.html
秘密在于使用“第一”隐式变量。
data out;
set [replace with your input dataset];
by names;
retain newColA;
if first.names then newcola=cola;
newcola = newcola - colb;
run;
[编辑] 我忘记了保留声明。 这是一个使用sashelp的鱼数据集的例子。 (虽然那样做是没有意义的。)
首先,必须对数据集进行排序。如果您已经可以直接进入数据步骤。
proc sort data = sashelp.fish(where=(Weight ne .) drop=Length1-Length3) out = fish nodupkey force;
by species weight height;
run;
data out;
set fish;
by species;
retain newColA;
if first.species then newColA = weight;
newColA = newColA - height;
run;