DATA Step, Macro, Functions and more

SAS matching

Accepted Solution Solved
Reply
New Contributor
Posts: 3
Accepted Solution

SAS matching

I recreated a one to one match using the PROC SURVEYSELECT. I have the final match dataset with only 4 variables inclduing matchID in the dataset.

How do I relate this to the original dataset from where the cases and control were selected so I can work on the matched data?


Accepted Solutions
Solution
‎04-02-2017 06:48 PM
Super User
Posts: 17,819

Re: SAS matching

[ Edited ]

You need to merge/join the two datasets in to the SurveySelect output. 

 

You'll need to rename the variables so you can identify the match/control records. This assumes you have different datasets with your control and match data. 

 

Proc sql;

Create table matched as 

Select a.* /*first set of records Control dataset*/
B.id as match_id, b.name as match_name, .... etc, /* Match dataset, rename variables because variables cannot have the same name*/
Ss.index /*Include the variable index from the SurveySelect data*/

From SurveySelect as ss /*Match/Control dataset shown*/

Left join control as a /*Get information from control dataset, match on ID*/
On ss.control_id = a.id

Left join match as b  /*Merge information from the match dataset, match on ID*/
On ss.match_id = b.id;

Quit;

View solution in original post


All Replies
PROC Star
Posts: 7,363

Re: SAS matching

Would help if you provide example have and want datasets in the form of data step code.

 

Art, CEO, AnalystFinder.com

 

New Contributor
Posts: 3

Re: SAS matching

[ Edited ]
 
New Contributor
Posts: 3

Re: SAS matching

I will appreciate the dataset code,

Thanks.

Solution
‎04-02-2017 06:48 PM
Super User
Posts: 17,819

Re: SAS matching

[ Edited ]

You need to merge/join the two datasets in to the SurveySelect output. 

 

You'll need to rename the variables so you can identify the match/control records. This assumes you have different datasets with your control and match data. 

 

Proc sql;

Create table matched as 

Select a.* /*first set of records Control dataset*/
B.id as match_id, b.name as match_name, .... etc, /* Match dataset, rename variables because variables cannot have the same name*/
Ss.index /*Include the variable index from the SurveySelect data*/

From SurveySelect as ss /*Match/Control dataset shown*/

Left join control as a /*Get information from control dataset, match on ID*/
On ss.control_id = a.id

Left join match as b  /*Merge information from the match dataset, match on ID*/
On ss.match_id = b.id;

Quit;
Super User
Posts: 10,500

Re: SAS matching

For future use you can use the option OUTALL on the Proc Surveyselect statement. This will add a variable SELECTED to the output set that will have a 1 for the selected records and 0 for the non-selected.

☑ This topic is SOLVED.

Need further help from the community? Please ask a new question.

Discussion stats
  • 5 replies
  • 248 views
  • 2 likes
  • 4 in conversation