2017-10-01 3 views
1

진단, 타임 스탬프, patientID 및 인구 통계 정보가 포함 된 수백만 건의 환자 조우 중 대규모 데이터 세트가 있습니다.SAS : 여러 줄에 환자 데이터가있는 특정 유형의 질병 수입니다.

우리는 특정 유형의 질병이 흔히 공통 조건에서 합병증이된다는 것을 발견했습니다.

나는 각 환자가 가지고있는 이런 유형의 질병의 수를 세고, 얼마나 많은 사람들이 1,2,3,4 등의 추가 질병을 갖고 있는지를 보여주는 막대 그래프를 만들고 싶습니다.

이것은 데이터 형식입니다.

PatientID Diagnosis Date Gender Age 
1   282.1  1/2/10  F 25 
1   282.1  1/2/10  F 87 
1   232.1  1/2/10  F 87 
1   250.02  1/2/10  F 41 
1   125.1  1/2/10  F 46 
1   90.1  1/2/10  F 58 
2   140   12/15/13 M 57 
2   282.1  12/15/13 M 41 
2   232.1  12/15/13 M 66 
3   601.1  11/19/13 F 58 
3   231.1  11/19/13 F 76 
3   123.1  11/19/13 F 29 
4   601.1  12/30/14 F 81 
4   130.1  12/30/14 F 86 
5   230.1  1/22/14  M 60 
5   282.1  1/22/14  M 46 
5   250.02  1/22/14  M 53 

일반적으로, 나는 DO 루프의 생각,하지만 난 환자 1과 같은 데이터 집합의 중복 (282.1가 두 번 나열됩니다)이 있기 때문에 어디서부터 시작 모르겠어요. 나는 그것을 어떻게 설명 할 지 모르겠다. 이견있는 사람?

대상 진단은 282.1, 232.1, 250.02입니다. 이 예에서 환자 1의 수는 3이고 환자 2의 수는 2입니다.

편집 : 편집 : 편집 : 이것은 내가 사용했지만 출력은 출력의 여러 줄에 각 PatientID를 표시합니다.

PROC SQL; 
create table want as 
select age, gender, patientID, 
     count(distinct diagnosis_description) as count 
    from dz_prev 
    where diagnosis in (282.1, 232.1) 
    group by patientID; 
quit; 

출력 테이블의 모양입니다. 왜이 환자는 여러 번 나타나나요?

Obs AGE GENDER PATIENTID count 
1 55 Male 107828695 1 
2 54 Male 107828695 1 
3 54 Male 107828695 1 
4 54 Male 107828695 1 
5 54 Male 107828695 1 
+0

귀하가 시도한 것을 게시하십시오. – Reeza

+0

다음 질문은 어떤 질병이 될 것인가와 그룹이 무엇인지에 대한 것이므로 귀하의 접근 방법이이를 고려하고 있는지 확인하십시오. – Reeza

+0

@Reeza 나는 내가 시도한 것과 그 결과를 보여주기 위해 글을 업데이트했다. – Kevin

답변

3

변수를 그룹화하지 않거나 요약 통계가 아닌 변수를 포함하면 SAS는 요약 통계를 다시 모든 원본 레코드와 다시 병합합니다. 그래서 여러 레코드를 얻는 것입니다. AGE는 일반적으로 데이터 세트가 수년을 커버하는 경우 다를 수 있습니다. 성별이 다를 경우 성별도 다를 수 있습니다. 따라서 빠른 분석을 위해 이와 같은 것을 시도 할 수 있습니다.

create table want as 
select patientID 
    , min(age) as age_at_onset 
    , min(gender) as gender 
    , count(distinct diagnosis_description) as count 
    from dz_prev 
    where diagnosis in (282.1, 232.1) 
    group by patientID 
; 
+0

정말 고마워요! 어느 사람들이 우리가 찾고있는 진단이 0인지 보여주는 방법은 무엇입니까? – Kevin

+1

관측치를 변경하려면 WHERE를 사용하여 관측치를 제거 할 수 없으므로 접근 방식을 변경해야합니다.대신 CASE 문을 사용하여 COUNT() 함수 내부로 이동하십시오. 'count ((282.1,232.1)의 진단) then diagnostics_description end)' – Tom

+0

추신 : 수치 변수에 진단 코드를 저장하는 데 어려움을 겪을 것입니다. ICD10 코드는 모두 문자로 시작하며 ICD9에는 문자로 시작하는 V 및 E 코드가 있습니다. – Tom

3

나는 당신이 SQL 문으로 당신이 원하는 것을 얻을 수 있다고 생각

PROC SQL NOPRINT; 
create table want as 
select PatientID, 
     count(distinct Diagnosis) as count 
    from have 
    where Diagnosis in (282.1, 232.1, 250.02) 
    group by PatientID; 
quit; 

이, 당신이에 관심이있는 경우에만 진단을 필터링하는 PatientID에 의해, 그들이 볼 수 있습니다 별개의 시간을 계산하고 결과를 새 테이블에 저장합니다.

+0

의견을 보내 주셔서 감사합니다. 나는 그것을 시험해 보았다. 출력에 같은 patientID의 여러 줄을 제공했다. 위의 게시물을 업데이트했습니다. 이견있는 사람? – Kevin

+0

@Kevin 위의 솔루션은 표시된대로 코드를 작성하면 올바르게 작동합니다. 코드에서와 같이 나이/성별을 사용하면 그렇지 않습니다. 질문에 나이/성별에 대한 단어가 하나도 없으므로이 답변은 귀하가 요청한 내용에 따라 정확합니다. 그리고 이것이 당신이하는 일을 보여주는 것이 중요한 이유입니다. 업데이트 된 질문에 따라 – Reeza

+0

을 사용하십시오. 다른 옵션은 표시된 코드를 작성하고 연령 및 성별 정보를 별도의 조인에 추가하는 것입니다. – DomPazz