BookmarkSubscribeRSS Feed
🔒 This topic is solved and locked. Need further help from the community? Please sign in and ask a new question.
hhchenfx
Rhodochrosite | Level 12

Hi Everyone,

I have 2 files: entry file and Master file.

I want to take subsample from Master file that meet each condition in entry file to further analyze.

(it is a bit like proc SQL to get subsample but the analysis is complicate that I can create that big file using proc SQL).

 

So my solution is that:

Step 1: start from entry file, work with the 1st record, a and 1.

Step 2: I go to mater file and select all records that meet condition in step 1, or records with a =1 --> 2 record

      analyze that subsample.

      after I am done

Go back to step 1: work on 2nd record

 

 

I vision my code has 2 macro;

      Outer macro that run throught entry file

      Inner macro that pick record from master and process

 

I want to run from the beginning to the end of the entry file but I dont know how to do

it.

Could you please help me?

 

Thank you so much for your help.

 

HC

 


data entry;
input variable $ value;
datalines;
a 1
a 2
b 6
b 9
;run;

data masterfile; 
input a b c d;
datalines;
 1 2 3 4
 1 9 3 2
 2 9 2 3
;
run;


	*the first record in entry file;
	data _entry_temp; set entry;
	if _N_=1;
	run;

	*create macro value to feed the inner macro;
	proc sql noprint;	select variable into:   entry_name 	from _entry_temp; quit;
	proc sql noprint;	select value into : 	entry_value 	from _entry_temp; quit;

	*Use the above to 2 value to feed inner Macro in a seperate file
	for checking purpose, I just want to create new file with macro name;
		%macro inner(entry_name2 = ,entry_value2=);
			data want_&entry_name.&entry_value; set _entry_temp;
			run;
		%mend;
1 ACCEPTED SOLUTION

Accepted Solutions
hhchenfx
Rhodochrosite | Level 12

oh, I got it. Not perfect but get the job done.

 

a quick question: why this one doesnt work?

 

data want_&entry_name&entry_value; set _entry_temp;run;

 

data entry;
input variable $ value;
datalines;
a 1
a 2
b 6
b 9
;run;

proc sql noprint;
select count(*) into: nobs from entry;quit;

%put &nobs;

data masterfile; 
input a b c d;
datalines;
 1 2 3 4
 1 9 3 2
 2 9 2 3
;
run;


%MACRO SINGLE_FACTOR;
%DO ENTRY_COUNT=1 %TO &NOBS;
%PUT "NEW ROUND";
%put &ENTRY_COUNT;
	*the first record in entry file;
	data _entry_temp; set entry;
	if _N_=&ENTRY_COUNT;
	run;

	*create macro value to feed the inner macro;
	proc sql noprint;	select variable into:   entry_name 		from _entry_temp; quit;
	proc sql noprint;	select value into 	: 	entry_value 	from _entry_temp; quit;

	%put &entry_name;run; 
	%put &entry_value;run; 

	*Use the above to 2 value to feed inner Macro in a seperate file
		for checking purpose, I just want to create new file with macro name;
			data want; set masterfile;
			IF &entry_name=&entry_value;
			run;

%END;
%MEND;

%SINGLE_FACTOR;

View solution in original post

1 REPLY 1
hhchenfx
Rhodochrosite | Level 12

oh, I got it. Not perfect but get the job done.

 

a quick question: why this one doesnt work?

 

data want_&entry_name&entry_value; set _entry_temp;run;

 

data entry;
input variable $ value;
datalines;
a 1
a 2
b 6
b 9
;run;

proc sql noprint;
select count(*) into: nobs from entry;quit;

%put &nobs;

data masterfile; 
input a b c d;
datalines;
 1 2 3 4
 1 9 3 2
 2 9 2 3
;
run;


%MACRO SINGLE_FACTOR;
%DO ENTRY_COUNT=1 %TO &NOBS;
%PUT "NEW ROUND";
%put &ENTRY_COUNT;
	*the first record in entry file;
	data _entry_temp; set entry;
	if _N_=&ENTRY_COUNT;
	run;

	*create macro value to feed the inner macro;
	proc sql noprint;	select variable into:   entry_name 		from _entry_temp; quit;
	proc sql noprint;	select value into 	: 	entry_value 	from _entry_temp; quit;

	%put &entry_name;run; 
	%put &entry_value;run; 

	*Use the above to 2 value to feed inner Macro in a seperate file
		for checking purpose, I just want to create new file with macro name;
			data want; set masterfile;
			IF &entry_name=&entry_value;
			run;

%END;
%MEND;

%SINGLE_FACTOR;

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
  • 1 reply
  • 1541 views
  • 0 likes
  • 1 in conversation