SAS循环创建数据集

时间:2018-06-02 23:42:26

标签: sas

我是sas的新手并且需要一些帮助(是的,我已经查看了所有内容 - 也许我只是不是以正确的方式问它,但我在这里):让我说我想从sashelp.cars和我创建一个数据集希望每个品牌有5个观察结果:

即:5 acura acura,5 obs for audi,5 obs for bmw等。我想要返回所有数据,但仅限于每次制作5次观察。

如果没有宏而是循环,我该如何做到这一点?我的实际数据集有93个不同的值,我不想使用93个宏调用

提前致谢!!!!

1 个答案:

答案 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行非常相似 - 如果您有一个可用于扭转每个品牌中的订单的关键列,那么这是最简单的选项。