我的数据集包含 n 周内在 x 个地点的多种商品的价格。我希望创建一个变量,对于任何给定位置/周,显示原始价格(列出的第一个价格)。我的数据集看起来像这样:
data have;
input item $ location $ week price;
cards;
X NC 1 10
X NC 2 10
X NC 3 9.75
X SC 2 8
X SC 3 5
Y NC 1 100
Y NC 2 75
Y NC 3 50
Y NC 4 50
;
run;
我想要一个如下所示的数据集:
data want;
input item $ location $ week price start_price;
cards;
X NC 1 10 10
X NC 2 10 10
X NC 3 9.75 10
X SC 2 8 8
X SC 3 5 8
Y NC 1 100 100
Y NC 2 75 100
Y NC 3 50 100
Y NC 4 50 100
;
run;
我知道我可能可以使用第一个。变量以某种方式执行此操作,但无法对其进行排序。帮忙?
我尝试了这个,但看起来我需要多个分组才能正确显示位置......我需要连接项目/位置还是有更优雅的方法来做到这一点?
data want;
set have;
by item;
if first.item then start_price=price;
start_price+0;
run;
最佳答案
我会使用retain
来保留最后一行的值。结果与 + 0
的 sum 语句相同,但我认为更有意义。
如果我对问题的理解正确,那么您希望first.location 设置start_price。只需使用 by item location;
即可执行此操作。
data want;
set have;
by item location;
retain start_price;
if first.location then start_price=price;
run;
关于SAS 根据起始价格创建滞后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29018683/