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](https://i.stack.imgur.com/ioJib.png)