2015-02-25 3 views
3

У меня есть три набора данных в стационарных, амбулаторных и профессиональных заявлениях. Я хочу найти количество уникальных людей, которые претендуют на употребление табака (1 = да табак, 0 = табак) в ЛЮБОЙ из этих трех наборов данных.Слияние, но сохранение всех наблюдений?

Таким образом, наборы данных в значительной степени все:

data inpatient; 
input Patient_ID Tobacco; 
datalines; 
1 0 
2 1 
3 1 
4 1 
5 0 
; 
run; 

Я пытаюсь объединить стационарную, амбулаторную и профессионально, так что я остался с теми идентификаторами пациентов, у которых есть претензии табака в любой из три набора данных с помощью:

data tobaccoall; 
merge inpatient outpatient professional; 
by rid; 
run; 

Однако перезапись некоторые из 1-й с 0 в новом наборе данных. Как лучше объединить наборы данных, чтобы найти, имеет ли пациент претензии в ЛЮБОЙ из наборов данных?

ответ

6

При объединении наборов данных в SAS, которые совместно используют имена переменных, значения из набора данных, указанного справа в операторе merge, перезаписывают значения из набора данных слева. Чтобы сохранить каждое значение, вы хотите переименовать переменные перед слиянием. Вы можете сделать это в инструкции merge, добавив опцию rename= после каждого набора данных.

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

data tobaccoall; 
    merge inpatient (rename=(tobacco=tobacco_in)) 
     outpatient (rename=(tobacco=tobacco_out)) 
     professional (rename=(tobacco=tobacco_pro)); 
    by rid; 
    tobacco_any = max(tobacco_in,tobacco_out,tobacco_pro,0); 
run; 
+0

Хороший ответ. Вы могли бы добавить что-то об использовании COALESCE или логических операторов, чтобы получить одну переменную в конце, а также, что, вероятно, то, что они действительно хотят. – Joe

0

Если данные были 1 = есть. = Нет (отсутствует), то вы могли бы использовать UPDATE заявление, в котором в основном работает как Merge за исключением того, не будет перезаписывать nonmissing данных с отсутствующими.

Например:

data inpatient; 
input Patient_ID Tobacco; 
datalines; 
1 . 
2 1 
3 1 
4 1 
5 . 
; 
run; 

data outpatient; 
input Patient_ID Tobacco; 
datalines; 
1 1 
2 1 
3 . 
4 . 
5 . 
; 
run; 

data want; 
    update inpatient outpatient; 
    by patient_id; 
run; 
Смежные вопросы