我正在尝试创建一个新变量,它接受组中的下一个值。特别是,我有:
User Quarter
A 2012Q1
A 2012Q2
A 2012Q3
我想要的输出是:
User Quarter Next_Quarter
A 2012Q1 2012Q2
A 2012Q2 2012Q3
A 2012Q3 n/a
我曾尝试为每位顾客提供一个柜台,但我不确定应该从哪里开始......
答案 0 :(得分:0)
在数据步骤中没有一种简单的方法可以展望。您可以做的是颠倒顺序,使用滞后函数来获取值,并重新排序。
data have;
input User $ Quarter $;
datalines;
A 2012Q1
A 2012Q2
A 2012Q3
B 2012Q1
B 2012Q2
B 2012Q3
;
/*Reverse the order*/
proc sort data=have;
by user descending quarter;
run;
/*Use Lag() to get the previous value (next since we reversed it)*/
data want;
set have;
by user;
tmp = lag(quarter);
if ^first.user then
Next_Quarter = tmp;
else
Next_Quarter = "n/a";
drop tmp;
run;
/*Re-sort to the proper order*/
proc sort data=want;
by user quarter;
run;
答案 1 :(得分:0)
您可以使用FIRSTOBS=2
的额外SET语句来“向前看”。确保考虑任何BY组。
data want ;
set have end=eof ;
by user;
if not eof then set have(keep=Quarter rename=(Quarter=Next_Quarter) firstobs=2) ;
if last.user then call missing(Next_Quarter);
run;
如果您没有BY组,请将最后一个IF更改为
if eof then call missing(Next_Quarter);