SAS Вернуться заголовок условно - PullRequest
0 голосов
/ 27 мая 2018

У меня есть набор данных, который выглядит следующим образом:

Набор данных

И я хотел бы получить результат, который будет выглядеть так: желаемый результат

Спасибо за помощь

Ответы [ 3 ]

0 голосов
/ 28 мая 2018

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

data have;
  infile datalines dlm=',' dsd;
  input name $ grp1 grp2 grp3;
  datalines;
    Joe,,1, 
    Moe,1,1, 
    King,1,,1
    Penn,,,1
    Zhee,1,,, 
  ;
run;

data want;
  set have;
  length flag $10;
  call missing(flag);

  array chars(3) grp1 grp2 grp3;
    do i=1 to 3;
      if chars(i)=. & flag='' then flag=catx(' ',"Group",i);
    end;
  drop i;
run;

Вы также можете использовать вызов функции VNAME(chars(i)) для замены вызова CATX function в кодев этом случае вы измените grp на group в именах переменных.

0 голосов
/ 28 мая 2018

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

data have;
  input name $ group1-group3 ;
cards;
Joe  . 1 .
Moe  1 1 . 
King 1 . 1
Penn . . 1
Zhee 1 . .
None 1 1 1
;

data want ;
  set have ;
  array flags group1-group3 ;
  length flag $32 ;
  do _n_=1 to dim(flags) while (missing(flag));
    if missing(flags(_n_)) then flag=vname(flags(_n_));
  end;
run;
proc print;
run;

Результаты:

Obs    name    group1    group2    group3     flag
 1     Joe        .         1         .      group1
 2     Moe        1         1         .      group3
 3     King       1         .         1      group2
 4     Penn       .         .         1      group1
 5     Zhee       1         .         .      group2
 6     None       1         1         1
0 голосов
/ 27 мая 2018

Way1: Используя proc sql

proc sql;
create table want as
select name,group1,group2,group3,
case when group1 is null then 'group1'
     when group2 is null then 'group2'
     when group3 is null then 'group3'
end as flag
from have;
quit;

Way2: Используя datastep

data want;
set have;
if      group1 is null then flag = 'group1';
else if group2 is null then flag = 'group2';
else if group3 is null then flag = 'group3';
else flag = 'check';
run;

Сообщите мне в случаелюбых уточнений.

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