SAS Looping для создания набора данных - PullRequest
0 голосов
/ 03 июня 2018

Я новичок в sas и мне нужна помощь (да, я просмотрел все - возможно, я просто не спрашиваю об этом правильно, но я здесь): допустим, я хочу создать набор данных из sashelp.cars и яЯ хочу, чтобы было 5 наблюдений для каждой марки:

т.е.делать.

Как бы я сделал это без макроса, а вместо цикла?Мой фактический набор данных имеет 93 различных значения, и я не хочу использовать 93 макро вызовов

Заранее спасибо !!!!

1 Ответ

0 голосов
/ 03 июня 2018

Какие 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.Если вы просто хотите взять все доступные строки в этом сценарии, вы можете использовать <code>method = srs, чтобы запросить простую случайную выборку.

Если вы хотите получить первые 5 на марку, затем выполните сортировку, как раньше, затем выполните шаг данных:

data mysample;
  set cars;
  by make;
  if first.make then rowcount = 0;
  rowcount + 1;
  if rowcount <= 5;
run;

Получение последних 5 строк на марку очень похоже - если у вас есть ключевой столбец, который можно использовать для изменения порядка в каждой марке, это самый простой вариант.

...