Как создать переменную класса на основе нескольких индикаторных переменных - PullRequest
0 голосов
/ 07 мая 2019

У меня есть набор результатов клинических испытаний.Я хочу создать переменную «результатов», основанную на именах переменных тестов, по которым пациенты были положительными.Об этом могут заботиться многие операторы if-else, но я хочу иметь возможность создавать символьную переменную, которая учитывает результаты нескольких тестов без необходимости заранее знать различные шаблоны ответов.

Это пример набора данных:

ID  RSV         FLU
1   Positive    Negative
2   Negative    Positive
3   Negative    Negative
4   Positive    Positive
5   Negative    Negative

Это то, что я ищу:

ID  RSV         FLU         Result
1   Positive    Negative    RSV
2   Negative    Positive    FLU
3   Negative    Negative    
4   Positive    Positive    RSV, FLU
5   Negative    Negative    

Любая помощь будет оценена!

Ответы [ 2 ]

1 голос
/ 07 мая 2019

Я использовал proc transpose для инвертирования набора данных, при таком подходе вы можете иметь столько столбцов, сколько необходимо для результата клинического теста

/*Input Dataset*/
data have;
input ID RSV$ FLU$;
datalines;
1 Positive Negative
2 Negative Positive
3 Negative Negative
4 Positive Positive
5 Negative Negative
;
run;

proc sort data=have; by id; run;

/*Initial Transpose*/
proc transpose data=have out=want0;
by id;
var rsv flu;
run;

/*Manipulate transposed dataset*/
data want1;
length Result $50.;
 set want0;
  by id;
  retain Result '';

  if first.id then Result='';
  if first.id and col1='Positive' then Result=_NAME_;
  else if not first.id and col1='Positive' then Result=catx(', ',Result,_NAME_);
  if last.id;
run;

/*Final outcome*/
proc sql;
create table want
as
select a.*, b.result
  from have a
  left join want1 b
  on a.id=b.id;
quit;
0 голосов
/ 07 мая 2019

Массив и VNAME (), вероятно, являются хорошими вариантами здесь.Не проверено.

data want;
   set have;
   array diags(*) RSV FLU;*list variables here;
   length diags_combined $256.;

   do i=1 to dim(diags);
     if diag(i) = 'Positive' then catx(', ', diags_combined, vname(diag(i)));
   end;
 run;
...