我是sas的新手并且需要一些帮助(是的,我已经查看了所有内容 - 也许我只是不是以正确的方式问它,但我在这里):让我说我想从sashelp.cars和我创建一个数据集希望每个品牌有5个观察结果:
即:5 acura acura,5 obs for audi,5 obs for bmw等。我想要返回所有数据,但仅限于每次制作5次观察。
如果没有宏而是循环,我该如何做到这一点?我的实际数据集有93个不同的值,我不想使用93个宏调用
提前致谢!!!!
答案 0 :(得分:1)
每个品牌你想要哪5个?前5?最后5?某种随机样本?
如果是后者,proc surveyselect
是可行的方法:
proc sort data = sashelp.cars out = cars;
by make;
run;
proc surveyselect
data = cars
out = mysample
method = URS
n = 5
selectall;
strata make;
run;
设置method = URS
请求使用替换进行无限制的随机抽样。因为这允许多次选择相同的行,所以我们保证样本中每个品牌5行,即使存在< 5在输入数据集中。如果您只想在该场景中获取所有可用行,则可以使用method = srs
请求简单随机抽样。
如果你想要每个品牌的前5个,然后像以前那样排序,那么使用数据步骤:
data mysample;
set cars;
by make;
if first.make then rowcount = 0;
rowcount + 1;
if rowcount <= 5;
run;
获取每个品牌的最后5行非常相似 - 如果您有一个可用于扭转每个品牌中的订单的关键列,那么这是最简单的选项。