算上sas

时间:2013-01-07 08:14:12

标签: sas

也许是一个愚蠢的问题...... 我得到了以下数据集:

id count
x    1  
y    2
z    3
a    1
b    2
c    3
etc.

我想要这个:

id count group
x    1    1
y    2    1
z    3    1
a    1    2
b    2    2
c    3    2  
etc.

以下是我的尝试:

data macro_1; set vix.macro_spy; where macro=1;
count+1;
if count>3 then do;
    count=1;
end;
    group=0;
    if count=1 then group+1;
    run;

但它不起作用。如果我曾经获得'count = 1',如何将所有'group'添加一个? 感谢。

2 个答案:

答案 0 :(得分:5)

更简单

data want;
set vix.macro_spy;
group+(count=1);
run;

答案 1 :(得分:0)

我不确定我理解你需要什么。因此,您对此数据集进行了排序,以便变量count的值始终为1, 2, 3, 1, 2, 3, 1, 2, 3... 现在,您想要生成变量group,以便每次变量count超过3时值都会递增?

如果是这样,你可以这样做:

data group;
  set vix.macro_spy;
  retain group;
  if _N_ = 1 then group = 0;
  if count = 1 then group + 1;
run;

这是我正在使用的一般模式。 if _N_ = 1部分只执行一次,这是初始化变量的地方。

retain语句确保变量将从DATA步骤的一次迭代到下一次迭代保留其值。