BookmarkSubscribeRSS Feed
manya92
Fluorite | Level 6

 

Hi all, 

 

I have this output from the code below. 

 

I want to only see the first diagnosis and first treatment date for each patient for each drug. 

 

For example for patient_id 2038 i want to see diagnosis_date = 01/21/2010,  treatment_date= 01/24/2010 for drug_code = A AND 

diagnosis_date = 01/21/2010, treatment_date=01/24/2010 for drug_code = B 

 

For patient_id 2120 i want to see diagnosis_date=01/09/2010 , treatment_date= 01/23/2010 for drug_code = B and 

diagnosis_date = 01/09/2010 , treatment_date = 01/24/2010 for drug_code = A

 

proc sql;	
	create table _00_diag_trt as 
	select distinct a.*, b.* 
	from pt_diag as a 
	full join pt_trt as b 
	on a.patient_id = b.patient_id
	order by a.patient_id , a.diagnosis_date ,b.treatment_date,b.drug_code;
quit;

proc print ;
run ;
Obs	patient_id	diagnosis_date	diagnosis_code	diagnosis	treatment_date	drug_code
1	2038	01/21/2010	174.9	Breast Cancer	01/24/2010	A
2	2038	01/21/2010	174.9	Breast Cancer	01/24/2010	B
3	2038	01/21/2010	174.9	Breast Cancer	01/27/2010	A
4	2038	01/21/2010	174.9	Breast Cancer	01/27/2010	B
5	2038	01/21/2010	174.9	Breast Cancer	01/30/2010	A
6	2038	01/21/2010	174.9	Breast Cancer	01/30/2010	B
7	2038	01/21/2010	174.9	Breast Cancer	02/02/2010	A
8	2038	01/21/2010	174.9	Breast Cancer	02/06/2010	A
9	2038	01/21/2010	174.9	Breast Cancer	02/11/2010	A
10	2038	01/21/2010	174.9	Breast Cancer	02/18/2010	A
11	2038	01/21/2010	174.9	Breast Cancer	02/20/2010	A
12	2038	01/21/2010	174.9	Breast Cancer	01/24/2017	A
13	2038	01/21/2010	174.9	Breast Cancer	01/27/2017	A
14	2038	01/21/2010	174.9	Breast Cancer	01/30/2017	A
15	2038	01/21/2010	174.9	Breast Cancer	02/02/2017	A
16	2038	01/21/2010	174.9	Breast Cancer	02/06/2017	A
17	2038	01/21/2010	174.9	Breast Cancer	02/11/2017	A
18	2038	01/21/2010	174.9	Breast Cancer	02/18/2017	A
19	2038	01/21/2010	174.9	Breast Cancer	02/20/2017	A
20	2120	01/09/2010	174.1	Breast Cancer	01/23/2010	B
21	2120	01/09/2010	174.1	Breast Cancer	01/24/2010	A
22	2120	01/09/2010	174.1	Breast Cancer	01/26/2010	A
23	2120	01/09/2010	174.1	Breast Cancer	01/26/2010	B
24	2120	01/09/2010	174.1	Breast Cancer	01/27/2010	A
25	2120	01/09/2010	174.1	Breast Cancer	01/27/2010	B
26	2120	01/09/2010	174.1	Breast Cancer	01/29/2010	A
27	2120	01/09/2010	174.1	Breast Cancer	01/29/2010	B
28	2120	01/09/2010	174.1	Breast Cancer	02/01/2010	A
29	2120	01/09/2010	174.1	Breast Cancer	02/01/2010	B
30	2120	01/09/2010	174.1	Breast Cancer	02/04/2010	A
31	2120	01/09/2010	174.1	Breast Cancer	02/04/2010	B
32	2120	01/09/2010	174.1	Breast Cancer	02/07/2010	A
33	2120	01/09/2010	174.1	Breast Cancer	02/07/2010	B
34	2120	01/09/2010	174.1	Breast Cancer	02/10/2010	A
35	2120	01/09/2010	174.1	Breast Cancer	02/10/2010	B
36	2120	01/09/2010	174.1	Breast Cancer	02/14/2010	A
37	2120	01/09/2010	174.1	Breast Cancer	02/14/2010	B
38	2120	01/09/2010	174.1	Breast Cancer	02/18/2010	A
39	2120	01/09/2010	174.1	Breast Cancer	02/18/2010	B
40	2120	01/09/2010	174.1	Breast Cancer	02/22/2010	A
41	2120	01/09/2010	174.1	Breast Cancer	02/22/2010	B
42	2120	01/09/2010	174.1	Breast Cancer	02/27/2010	A
43	2120	01/09/2010	174.1	Breast Cancer	02/27/2010	B
44	2120	01/09/2010	174.1	Breast Cancer	03/02/2010	A
45	2120	01/09/2010	174.1	Breast Cancer	03/02/2010	B

 

3 REPLIES 3
ChrisNZ
Tourmaline | Level 20

2 solutions:

 

1. Sort by drug code

order by a.patient_id, b.drug_code, a.diagnosis_date, b.treatment_date;

then use a data step keeping only first.drug_code

by PATIENT_ID DRUG_CODE;
if first.DRUG_CODE;

2. Add a group by clause in SQL to group by PATIENT_ID, DRUG_CODE and add a having clause to keep the record with the lowest (minimum) date in each group.

 

 

 

manya92
Fluorite | Level 6

can you please write the code for sql option 2 ?

This is what i have but i am getting this error

147        proc sql;
 148        create table _01_ttr as
 149        select distinct min(treatment_date) as first_trt, patient_id, diagnosis_date, drug_code
 150        from _01_diag_trt
 151        group by patient_id,drug_code
 152        having min(treatment_date);
 NOTE: The query requires remerging summary statistics back with the original data.
 NOTE: Table WORK._01_TTR created, with 90 rows and 4 columns.
ChrisNZ
Tourmaline | Level 20

I don't see any error.

You have a note informing you of the type of processing you requested when asking for the table data to be matched to its summarized data.

 

sas-innovate-2024.png

Available on demand!

Missed SAS Innovate Las Vegas? Watch all the action for free! View the keynotes, general sessions and 22 breakouts on demand.

 

Register now!

How to Concatenate Values

Learn how use the CAT functions in SAS to join values from multiple variables into a single value.

Find more tutorials on the SAS Users YouTube channel.

Click image to register for webinarClick image to register for webinar

Classroom Training Available!

Select SAS Training centers are offering in-person courses. View upcoming courses for:

View all other training opportunities.

Discussion stats
  • 3 replies
  • 906 views
  • 0 likes
  • 2 in conversation