Создание сводного столбца в SAS из нескольких столбцов - PullRequest
0 голосов
/ 10 декабря 2018

Я хочу создать один столбец в SAS, который суммирует несколько столбцов для каждого человека в наборе данных.Данные выглядят следующим образом:

Subject      VisitNumber   Exam      Result       Comments
001          1             Blood     Negative     Will return for more testing
001          1             BP        100          Score is in normal range
001          1             Vision    20/20        No issues with eyesight 
002          5             BMI       19           Within healthy range
002          5             Hearing   Good         Patient hears well
002          5             Drug      Negative     Subject passed drug test

Информация для каждого субъекта и номер его последующего посещения должны быть обобщены следующим образом:

Subject    VisitNumber      Summary
001        1                Exam: Blood, Result: Negative, Comments: Will return for more testing; Exam: BP, Result: 100, Comments: Score is normal range; Exam: Vision, Result: 20/20, Comments: No issues with eyesight
002        5                Exam: BMI, Result: 19, Comments: Within healthy range; Exam: Hearing, Result: Good, Comments: Patient hears well; Exam: Drug, Result: Negative, Comments: Subject passed drug test

Можно сделать это в R следующим образом:

for (i in 1:length(data$Subject))

{
data$Summary[i] = data$Comments[i] = 'Exam: ' + Exam[i] + ', Result: ' + Result[i] + ', Comments: ' + Comments[i] + '; '
}

Данные могут быть сжаты по строкам по столбцу Комментариев.Будем весьма благодарны за понимание того, как это можно сделать с помощью шага DATA или PROC SQL в SAS.

Ответы [ 2 ]

0 голосов
/ 10 декабря 2018

Для целей отчетности Proc PRINT имеет специальную схему вывода, когда в операторах BY и ID указаны одинаковые имена переменных.Группы будут разделены , а значения группы не будут повторяться , если в группе более одной строки.

data have;
input
Subject&$    VisitNumber&  Exam&$    Result&$     Comments&$200.; datalines;
001          1             Blood     Negative     Will return for more testing
001          1             BP        100          Score is in normal range
001          1             Vision    20/20        No issues with eyesight 
002          5             BMI       19           Within healthy range
002          5             Hearing   Good         Patient hears well
002          5             Drug      Negative     Subject passed drug test
run;

ods html style=Journal;
title "Subject visit examinations";
proc print data=have;
  by subject visitnumber;
  id subject visitnumber;
run;

enter image description here

0 голосов
/ 10 декабря 2018

Использование функций сцепления SAS.

data want;
   set have;
   by subject notsorted;
   length summary $500.;
   retain summary;
   summary=catx(';',summary, catx(',', cats('Exam:',Exam),cats('Result:',Result),cats('Comments:',Comments)));
   if last.subject then output;
   keep Subject VisitNumber summary;
run;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...