Как извлечь несоответствующие символы из двух столбцов в SAS - PullRequest
0 голосов
/ 14 июня 2019

У меня есть два столбца в руководстве SAS для предприятий, в котором у меня есть список символов.Например, 1-й столбец может содержать 7 символов, а второй столбец также может содержать 7 символов, поэтому они совпадают.Однако иногда столбцы не совпадают, и я хочу поместить несовпадающие символы в новый столбец.Я попробовал функцию поиска.

   proc sql;
    create table Z
    as
    select *,
    case when (act_route_path<>designed_route_path) then 'Non Match'
    else 'Match' end as Off_at_Location_1
    from G;
    run;

Приведенный выше код выполняется без ошибок, однако я не хочу, чтобы истинный результат bool был «Несоответствие».Я хочу сказать мне несоответствующие символы.Это возможно в операторе case?

У меня есть два столбца, в которых мои данные разделены (-), и я могу использовать эти два столбца для вывода.

SEA-MDW-EFH-STL ----------- SEA-POR-MDW-EFH-STL

В приведенной выше строке я хочу вставить SASновый столбец, POR.Спасибо за помощь!

Ответы [ 2 ]

0 голосов
/ 16 июня 2019

Вы можете использовать compress, чтобы по существу сравнить два значения маршрута против объединения

data have;
  input route1 $8. route2 $8.; datalines;
ABCDEFGH CDEFGHI
ACEGI    BCDEFGHI
ABCD     EFGH
1234     1234
run;

proc sql;
  create table want as
  select route1, route2
  , case 
      when route1=route2 then 'Same route'
      else 
        'diff:' 
        || '-' || trim(compress(route1, route2))  /* chars in 1 not in 2 */
        || '+' || trim(compress(route2, route1))  /* chars in 2 not in 1 */
    end  as route_compare length=25
  from have;
0 голосов
/ 15 июня 2019

Вы ищете что-то вроде этого Красного?

data g; 
    length act_route_path $ 2 designed_route_path $ 2;`
    input act_route_path $ designed_route_path $;
datalines;
    xx xy
    xx xx
    yy yy
    yx yy
;
run;

proc sql; create table z as
    select act_route_path, designed_route_path, 
        case when Off_at_Location_1 = 0 and substr2 = 0 then designed_route2 
            else 'Match' end as result
    from(select *
        ,case when act_route_path = designed_route_path then 1 else 0 end as Off_at_Location_1

        ,substr(act_route_path,1,1) as act_route1
        ,substr(act_route_path,1,2) as act_route2
        ,substr(designed_route_path,1,1) as designed_route1
        ,substr(designed_route_path,2,1) as designed_route2

        ,index(substr(act_route_path,1,1),substr(designed_route_path,1,1)) as substr1
        ,index(substr(act_route_path,2,1),substr(designed_route_path,2,1)) as substr2
    from g
)a
;
quit;

Если вы разместите данные, код станет намного чище.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...