4

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

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',如何将所有'组'加一个?谢谢。

4

2 回答 2

5

更简单

data want;
set vix.macro_spy;
group+(count=1);
run;
于 2013-01-07T12:17:27.910 回答
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 步的一次迭代到下一次迭代中保持其值。

于 2013-01-07T09:58:18.887 回答