BookmarkSubscribeRSS Feed
Ronein
Onyx | Level 15

Hello

What is the way to write the following statements in array?

It should be a flexible program?

The user define dates that he is interested (vector macro parameter)

Then the program is working by these dates.

In the example show below the user defined 5 dates so should have 5 statements .

But in another case user might choose for example 3 dates and then need only 3 statements

 

 

IF S1 then YYMM_source=&m1;
IF S2 then YYMM_source=&m2;
IF S3 then YYMM_source=&m3;
IF S4 then YYMM_source=&m4;
IF S5 then YYMM_source=&m5;

 

 

 

Data ttt2009;
input id z w y;
cards;
1 9 0 10
2 9 0 20
3 8 0 30
;
run;
Data ttt2006;
input id z w y;
cards;
1 9 0 12
2 9 0 23
3 8 0 34
;
run;
Data ttt2003;
input id z w y;
cards;
1 9 0 54
2 9 0 23
3 8 0 42
;
run;
Data ttt1912;
input id z w y;
cards;
1 9 0 17
2 9 0 54
3 8 0 26
;
run;
Data ttt1909;
input id z w y;
cards;
1 9 0 34
2 9 0 16
3 8 0 43
;
run;
Data ttt1906;
input id z w y;
cards;
1 9 0 34
2 9 0 19
3 8 0 25
;
run;
Data ttt1903;
input id z w y;
cards;
1 9 0 34
2 9 0 25
3 8 0 18
;
run;

%let vector=2009+2006+2003+1912+1909;

%let n =%sysfunc(countw(&vector));
%put &n;


/*%put &m1;*/
/*%put &m2;*/
/*%put &m3;*/
/*%put &m4;*/
/*%put &m5;*/
%macro sset; 
%do j=1 %to &n.;
ttt&&m&j.. (where=(Z=9 and W=0)in=S&j.)
%end;
%mend;
%put %sset;


Data tbl_all;
set %sset;
by ID;
/*Check how do it automatically???*/
IF S1 then YYMM_source=&m1;
IF S2 then YYMM_source=&m2;
IF S3 then YYMM_source=&m3;
IF S4 then YYMM_source=&m4;
IF S5 then YYMM_source=&m5;
Run;
 
    
6 REPLIES 6
andreas_lds
Jade | Level 19

You may want to read the documentation of the set statement, especially the indsname-option seems to useful to solve the problem.

PaigeMiller
Diamond | Level 26

This whole problem becomes incredibly easy if you don't put calendar year/month into data set names or variable names. Use one long data set, with a variable to indicate the year and month, and the problem is much much easier. 

--
Paige Miller
Ronein
Onyx | Level 15
This is true but let's say that this structure is not defined by me and I see it as the status that I need to work with
Ronein
Onyx | Level 15

It is perfect , I am still interested to know if it is possible to write the IF's statements using macro or array?

 

Data tbl_all;
set %sset  indsname=ds;
by ID;
YYMM_source=substr(scan(ds,2,'.'),4);
Run;
/*WORK.TTT2009 */

sas-innovate-2026-white.png



April 27 – 30 | Gaylord Texan | Grapevine, Texas

Registration is open

Walk in ready to learn. Walk out ready to deliver. This is the data and AI conference you can't afford to miss.
Register now and lock in 2025 pricing—just $495!

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
  • 6 replies
  • 1475 views
  • 3 likes
  • 4 in conversation