Proc SQL SAS Basic - PullRequest
       16

Proc SQL SAS Basic

0 голосов
/ 12 марта 2019

Я хочу получить ответ на этот вопрос.

У меня есть следующие данные:

ABC123

Необходимые данные:

123ABC 

Как распечататьвыводить в этом формате (то есть в обратном направлении), используя Proc SQL?

Ответы [ 4 ]

0 голосов
/ 13 марта 2019

Base SAS содержит функцию REVERSE, которая предназначена для обращения строки и может использоваться как в proc sql, так и в шаге данных. См. Пример в документации SAS или здесь:

proc sql;
select Name,
       reverse(Name) as Name_reversed
from sashelp.class
;
quit;

вывод:

Name    | Name_reversed
--------|--------------
Alfred  | derflA
Alice   | ecilA
Barbara | arabraB

и т.д.

0 голосов
/ 13 марта 2019

Возможно, вы захотите использовать trim () для работы с конечными пробелами, которые SAS хранит в символьных переменных.

trim(substr(have,4))||substr(have,1,3)
0 голосов
/ 13 марта 2019

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

outStr = prxChange("s/([A-z]+)([\d]+)/$2$1/", 1, inStr);

Вы можете легко использовать его в Proc sql.

data test1;
  inStr = "ABCdef12345";
run;

proc sql;
  create table test2 as
  select prxChange("s/([A-z]+)([\d]+)/$2$1/", 1, inStr) as outStr
  from test1;
quit;
0 голосов
/ 12 марта 2019

На основании предоставленной информации и предполагая, что все ваши данные имеют одинаковый формат, вы можете настроить функцию substr в proc sql

data have;
value='ABC123';
run;

proc sql;
create table want
as
select value, 
       substr(value,4,4)||substr(value,1,3) as new_value
  from have;
quit;

proc print data=want; run;

Та же функция может быть применена и в шаге данных.

...