Сортировать все строки по длине строки в переменной X (сначала длинные строки) - PullRequest
1 голос
/ 24 февраля 2020

У меня есть переменная UserName, которая содержит идентификаторы переменной длины. Сокращенный пример:

enter image description here

Как отсортировать все строки по переменной X, где более длинные строки перечислены первыми.

Контекст: это предназначен для расчета баллов по вузу за 2015 год с использованием макроса ASA24. Это пишет:

/*Note: Some users have found that the SAS program will drop observations from the analysis if the ID field is not the same length for all observations.  To prevent this error, the observations with the longest ID length should be listed first when the data is imported into SAS. */

Ответы [ 3 ]

2 голосов
/ 24 февраля 2020

Pro c SQL с предложением ORDER BY, указывающим значение порядка , вычисленное в выражении CASE.

Вычисление when length(X) > 8 then -length(X) else 0 гарантирует, что самые длинные значения будут первыми когда сортируется и все значения длины <= <em>some-capping-length (8) обрабатываются одинаково

ORDER BY length(X) desc, X также будет выбирать сначала самые длинные значения X, а затем сам X, но длина будет преобладать упорядочение, даже если значения длины <8. </p>

data have;
length X $50;
input X; datalines;
GFHsp036
GFHsp038
GFHsp039
GFHsp040
GFHsp0400
GFHsp0401
GFHsp0402
GFHsp04021
;

proc sql;
  create table want as
  select * from have
  order by
     case when length(x) > 8 then -length(X) else 0 end,
     X
  ;
quit;

proc print;
  var X / style=[fontfamily='Courier'];
run;

enter image description here

1 голос
/ 24 февраля 2020

Вот, пожалуй, самый простой способ сделать это

data have;
input string $;
datalines;
abcde
ab   
a    
abcd 
abc  
;

proc sql;
   create table want as
   select * from have
   order by length(string) desc;
quit;
0 голосов
/ 03 марта 2020

Переупорядочение идентификаторов не помогло в моем случае, так как PRO C ИМПОРТ необходим GUESSINGROWS = MAX.

Пожалуйста, см. Макросрезающие идентификаторы SAS

Как это сделать исправить усеченные идентификаторы, которые этот вопрос пытался исправить.

...