SAS计算值随时间变化的次数

时间:2015-12-29 14:15:58

标签: sas

我有一个按位置存储每周值的数据集。我想确定值改变了多少次。最初我认为我可以计算不同的值,但问题是有时值会重复。请考虑以下示例:

data have;
    input location $ week value;
cards;
NC 1 100
NC 2 200
NC 3 200
NC 4 200
NC 5 100
NC 6 200
SC 1 500
SC 2 500
SC 3 500
SC 4 500
SC 5 500
SC 6 500
;
run;

请注意NC位置的值在2,5,6周变化三次。位置SC的值改变0次。

我想要更改频率的输出......类似于:

NC 3
SC 0

非常感谢任何帮助。谢谢。

2 个答案:

答案 0 :(得分:4)

NOTSORTED语句中使用BY关键字,然后您可以计算FIRST.次出现次数。

proc sort data=have;
  by location week;
run;
data want 
  set have;
  by location value notsorted ;
  if first.location then nchange=0;
  else nchange + first.value;
  if last.location;
  keep location nchange ;
run;

答案 1 :(得分:3)

确保数据已排序。你的例子是,但如果不是那么

proc sort data=have;
by location week;
run;

之后,在数据步骤中使用BY语句。这将创建指示符,告诉您何时处于BY组的开头和结尾。

RETAIN,将保持行之间的值。

data want;
set have;
by location;

retain last count;

if first.location then do;
    count = 0;
    last = value;
end;

if last ^= value then
    count = count + 1;

last = value;

if last.location then 
    output;
run;