Порядок сортировки наборов данных - PullRequest
2 голосов
/ 05 марта 2009

Есть ли в SAS собственный метод для определения порядка сортировки набора данных?

Ответы [ 5 ]

3 голосов
/ 06 марта 2009

Как говорит Sassy, ​​SAS может узнать, отсортирован ли набор данных только в том случае, если он выполнял сортировку, или если вы явно указали ему порядок сортировки. Если вы не выполнили ни одного из этих шагов, он не будет знать, находятся ли данные в каком-либо порядке.

Мне нравится идея AFHood просто попытаться разобраться в этом. Если SAS знает, что он отсортирован таким образом, он просто скажет вам и не будет делать это снова.

NOTE: Input data set is already sorted, no sorting done

Вот еще несколько идей для изучения сортировки данных ... Наслаждайтесь.

Если вы просто хотите посмотреть на это вручную, вы можете использовать proc content data = libname.data; run; и посмотрите на вывод. Есть атрибут, который называется отсортированным. Если вы используете режим управления окнами, вы можете щелкнуть правой кнопкой мыши на наборе данных в проводнике и выбрать свойства, затем перейти на вкладку сведений и увидеть значения, отсортированные по.

Для программного подхода к тестированию вы можете использовать выходной набор данных из содержимого процедуры. Столбцы sorted и sortedby сообщат вам, отсортирован ли набор данных и по какой переменной он отсортирован. Попробуйте, выполнив код ниже.

/* In an unsorted data set, proc contents will give missing values
   for the sorted and sortedby columns of its output data */
proc contents data=sashelp.class out=class_contents noprint;run;
proc print data=class_contents;
  var memname name sorted sortedby;
run;

/* Now sort and observe the changes in the sorted and sortedby columns */
proc sort data=sashelp.class out=class_sorted; by name;run;
proc contents data=class_sorted out=class_sorted_contents;run;
proc print data=class_sorted_contents;
  var memname name sorted sortedby;
run;`enter code here`
2 голосов
/ 10 марта 2009

Вы можете использовать функцию Attrc.

Документы на http://support.sas.com/onlinedoc/913/getDoc/en/lrdict.hlp/a000147794.htm

Это выглядит примерно так

data _null_;
   dsid=open("work.a","i");
   sortby=attrc(dsid,"SORTEDBY");
   put  sortby=;
   rc=close(dsid);
run;
2 голосов
/ 05 марта 2009

Если данные действительно были «отсортированы», да. В нижней части вывода, создаваемого содержимым процедуры, есть небольшая таблица с информацией о сортировке.

Наборы данных, которые были построены с данными, которые уже находились в некотором порядке сортировки, могут не иметь этой информации, прикрепленной к ним, и вам нужно будет начать исследовать данные, чтобы определить их порядок.

1 голос
/ 05 марта 2009

Я предполагаю, что проблема, которую вы решаете, состоит в том, чтобы определить, нужно ли сортировать набор данных программным способом. Лучшее решение, которое мы использовали, - это просто использовать метод сортировки в случае сомнений.

Конечно, вы могли бы сказать, что это накладные расходы и обработка .. Ну, да, но если набор данных уже отсортирован правильно, процесс сортировки знает об этом и позволит вашему коду двигаться с минимальной обработкой. Он имеет встроенную логику «если отсортировано, то иди дальше».

Если это не проблема, которую вы пытаетесь решить, уточните, и мы посмотрим, сможем ли мы помочь.

0 голосов
/ 06 марта 2009

Если sas не сортировал данные, но вы думаете, что они могут быть отсортированы, вы можете попытаться обработать их так, как будто они отсортированы, и устранить ошибки, которые могут возникнуть или не возникнуть в результате.

* This works, swap some values to see how an error looks;
data foo;
input height;
cards;
1
2
3
4
;
run;

data _null_;
set foo;
by height;
run;

Состояния ошибок могут быть обнаружены и сброшены в макросе, но такой подход, скорее всего, запутается. Подробнее об этом здесь

...