简单的SAS计算

时间:2013-09-11 12:25:53

标签: sas datastep

我有一个包含三列的数据集: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模式,所以我不知道该怎么做?

1 个答案:

答案 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;