BookmarkSubscribeRSS Feed
raja777pharma
Fluorite | Level 6

Hello ,

 

As per below data table 01 and want to create new data as table 02

 

if subject have three catergory's TEST,EXTRA and MORE , each in catergory again they three values CT ,MRI and other

 

if subject had any one of CT , MRI or OTH marked then in New data TYPE is <TEST or EXTRA or MORE or> and TRT is <CT_01 or MRI_02 or OTH_03 >

 

if subject had mraked two are above then TRT is <multiple>

 

I want one more data table 03 , as in if any TRT value is multiple then TRT_MULTPLE value will be <TRT_CT_MRI> as shown in below table 03

 

Table 01 : Exist data

 

Table 02 : Want new data as per above conditions <New data set 01>

 

Table 03 : Want new data as per above conditions <new data set 02>

 

Table 01 :

 

SUBNUMVISNAMETEST_DECTESTDATTESTCTTESTMRITEST_OTHEXTRA_DECEXTRADATEXTRACTEXTRAMRIEXTRAOTHMORE_DECMOREDATMORECTMOREMRIMOREOTH
001VSIST1Yes16Apr2019X  Yes16Apr2019 X Yes16Apr2019X  
002VSIST1Yes06May2019X  Yes06May2019 X Yes06May2019X  
002VSIST2Yes13Jun2019X  Yes13Jun2019 X Yes13Jun2019XX 
003VSIST1Yes22Apr2019X  Yes22Apr2019 X Yes22Apr2019XX 
004VSIST1Yes11Sep2019X  Yes11Sep2019 X Yes11Sep2019X  
004VSIST2Yes05Nov2019X  Yes05Nov2019 X Yes05Nov2019X  
004VSIST2Yes03Dec2019X  Yes03Dec2019 X Yes03Dec2019X  
005VSIST1Yes12Dec2019X  Yes12Dec2019 X Yes12Dec2019X  
006VSIST1Yes30Oct2019X  Yes30Oct2019 X Yes30Oct2019X X
007VSIST1Yes23Oct2019X  Yes23Oct2019 X Yes23Oct2019X  
008VSIST1Yes02Jan2020X  Yes02Jan2020 X Yes02Jan2020X  

 

Table 02 : New data set need to create as per above data :

SUBNUMVISNAMEDATETYPETRT
001VSIST116Apr2019TESTCT_01
002VSIST106May2019TESTCT_01
002VSIST213Jun2019TESTCT_01
003VSIST122Apr2019TESTCT_01
004VSIST111Sep2019TESTCT_01
004VSIST205Nov2019TESTCT_01
004VSIST203Dec2019TESTCT_01
005VSIST112Dec2019TESTCT_01
006VSIST130Oct2019TESTCT_01
007VSIST123Oct2019TESTCT_01
008VSIST102Jan2020TESTCT_01
001VSIST116Apr2019EXTRAMRI_02
002VSIST106May2019EXTRAMRI_02
002VSIST213Jun2019EXTRAMRI_02
003VSIST122Apr2019EXTRAMRI_02
004VSIST111Sep2019EXTRAMRI_02
004VSIST205Nov2019EXTRAMRI_02
004VSIST203Dec2019EXTRAMRI_02
005VSIST112Dec2019EXTRAMRI_02
006VSIST130Oct2019EXTRAMRI_02
007VSIST123Oct2019EXTRAMRI_02
008VSIST102Jan2020EXTRAMRI_02
001VSIST116Apr2019MORECT_01
002VSIST106May2019MORECT_01
002VSIST213Jun2019MOREMULTIPLE
003VSIST122Apr2019MOREMULTIPLE
004VSIST111Sep2019MORECT_01
004VSIST205Nov2019MORECT_01
004VSIST203Dec2019MORECT_01
005VSIST112Dec2019MORECT_01
006VSIST130Oct2019MOREMULTIPLE
007VSIST123Oct2019MORECT_01
008VSIST102Jan2020MORECT_01

 

Table 03 : New data set need to create based on table 01

 

SUBNUMVISNAMEDATETYPETRT_MULTIPLE
001VSIST116Apr2019TESTCT_01
002VSIST106May2019TESTCT_01
002VSIST213Jun2019TESTCT_01
003VSIST122Apr2019TESTTRT_CT_MRI
004VSIST111Sep2019TESTTRT_CT_MRI
004VSIST205Nov2019TESTCT_01
004VSIST203Dec2019TESTCT_01
005VSIST112Dec2019TESTCT_01
006VSIST130Oct2019TESTTRT_CT_OTH
007VSIST123Oct2019TESTCT_01
008VSIST102Jan2020TESTCT_01

 

3 REPLIES 3
ed_sas_member
Meteorite | Level 14

Hi @raja777pharma 

 

Hereafter is a piece of code to create table2.

NB: I guess there is a typo in the name of variable "TEST_OTH" -> it should be more logical to have TESTOTH (please rename it so that the macro can work).

 

I don't understand the logic to create table3 ->could you please explain a bit more? In particular, how should we consider the 'TYPE' variable ? -> it seems that the data you displayed in table 3 correspond to type = "MORE" ?

 

Best,

 

data table1;
	infile datalines dlm="09"x dsd missover;
	input SUBNUM VISNAME $
		  TEST_DEC $ TESTDAT:date9. TESTCT $ TESTMRI $ TESTOTH $
		  EXTRA_DEC $ EXTRADAT:date9. EXTRACT $ EXTRAMRI $ EXTRAOTH $
		  MORE_DEC $ MOREDAT:date9. MORECT $ MOREMRI $ MOREOTH $;
	format TESTDAT EXTRADAT MOREDAT date9.;
	datalines;
001	VSIST1	Yes	16Apr2019	X	 	 	Yes	16Apr2019	 	X	 	Yes	16Apr2019	X	 	 
002	VSIST1	Yes	06May2019	X	 	 	Yes	06May2019	 	X	 	Yes	06May2019	X	 	 
002	VSIST2	Yes	13Jun2019	X	 	 	Yes	13Jun2019	 	X	 	Yes	13Jun2019	X	X	 
003	VSIST1	Yes	22Apr2019	X	 	 	Yes	22Apr2019	 	X	 	Yes	22Apr2019	X	X	 
004	VSIST1	Yes	11Sep2019	X	 	 	Yes	11Sep2019	 	X	 	Yes	11Sep2019	X	 	 
004	VSIST2	Yes	05Nov2019	X	 	 	Yes	05Nov2019	 	X	 	Yes	05Nov2019	X	 	 
004	VSIST2	Yes	03Dec2019	X	 	 	Yes	03Dec2019	 	X	 	Yes	03Dec2019	X	 	 
005	VSIST1	Yes	12Dec2019	X	 	 	Yes	12Dec2019	 	X	 	Yes	12Dec2019	X	 	 
006	VSIST1	Yes	30Oct2019	X	 	 	Yes	30Oct2019	 	X	 	Yes	30Oct2019	X	 	X
007	VSIST1	Yes	23Oct2019	X	 	 	Yes	23Oct2019	 	X	 	Yes	23Oct2019	X	 	 
008	VSIST1	Yes	02Jan2020	X	 	 	Yes	02Jan2020	 	X	 	Yes	02Jan2020	X	 	 
;
run;

/* TABLE 2 */

%macro transp (prefix = );
	proc transpose data=table1 out=table1_&prefix (rename=(&prefix.DAT=DATE));
		var &prefix.CT &prefix.MRI &prefix.OTH;
		by SUBNUM VISNAME &prefix.DAT;
	run;
%mend;

%transp(prefix=test);
%transp(prefix=extra);
%transp(prefix=more);

data table1_int;
	set table1_test (in=a) table1_extra (in=b) table1_more (in=c);
	
	length TYPE $ 5 ;
	if 		a then TYPE = "TEST";
	else if b then TYPE = "EXTRA";
	else if c then TYPE = "MORE";
	
	length TRT $ 8;
	if 		prxmatch('/CT/', _name_)  then TRT = "CT_01";
	else if prxmatch('/MRI/', _name_) then TRT = "MRI_02";
	else if prxmatch('/OTH/', _name_) then TRT = "OTH_03";

	if col1 ="X" then output;
	drop col1 _name_;
;
run;

data table2;
	set table1_int;
	by TYPE SUBNUM VISNAME DATE notsorted;
	if first.date then count= 0;
	count + 1;
	if count > 1 then TRT = "MULTIPLE";
	drop count;
	if last.date then output;
run;

 

raja777pharma
Fluorite | Level 6

Hello ed_sas_memebr ,

 

Thank you for answer .

 

for table three purpose is if any TRT value is multiple , then we have to know what are multiple values are checked and out the same value in to another variable , in that means TYPE can value is TRT1-3.

 

 

ed_sas_member
Meteorite | Level 14

Hi @raja777pharma 

 

Thank you for the clarification.

Here is an attempt to create table3. Let me know if does meet your expectations.

Best,

/* TABLE 3 */

%macro macro2 (prefix = );
	data table3_&prefix.;
		set table1;
		length TYPE $ 5;
		TYPE = upcase("&prefix.");
		if &prefix.CT  = "X" then flag_CT = "CT";
		if &prefix.MRI = "X" then flag_MRI = "MRI";
		if &prefix.OTH = "X" then flag_OTH = "OTH";
		TRT_MULTIPLE = tranwrd(catx("_","TRT",flag_CT,flag_MRI,flag_OTH),"_.","");
		if TRT_MULTIPLE = "TRT_CT" then TRT_MULTIPLE = "CT_01";
		if TRT_MULTIPLE = "TRT_MRI" then TRT_MULTIPLE = "MRI_02";
		if TRT_MULTIPLE = "TRT_OTH" then TRT_MULTIPLE = "OTH_03";
		keep SUBNUM	VISNAME	TESTDAT TYPE TRT_MULTIPLE;
	run;

%mend;

%macro2(prefix =TEST);
%macro2(prefix =EXTRA);
%macro2(prefix =MORE);

data table3;
	set table3_test table3_extra table3_more;
run;

hackathon24-white-horiz.png

2025 SAS Hackathon: There is still time!

Good news: We've extended SAS Hackathon registration until Sept. 12, so you still have time to be part of our biggest event yet – our five-year anniversary!

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.

SAS Training: Just a Click Away

 Ready to level-up your skills? Choose your own adventure.

Browse our catalog!

Discussion stats
  • 3 replies
  • 728 views
  • 1 like
  • 2 in conversation