我有一个按位置存储每周值的数据集。我想确定值改变了多少次。最初我认为我可以计算不同的值,但问题是有时值会重复。请考虑以下示例:
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
非常感谢任何帮助。谢谢。
答案 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;