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

How can I create 25 my_class&j&k files, if one of the file (my_class36) from (j,k)=(3,6) is as follows?

 

%LET j=3;
%LET k=6;
data my_class&j&k;
set sashelp.class;
height&j=height*&j;
weight&k=weight*&k;
run;

 

There 25 combinations of j and k, if j=1,3,6,9, & 12 and k=1,3,6,9,& 12.

1 ACCEPTED SOLUTION

Accepted Solutions
Astounding
PROC Star

The previous posters might be right.  This might not be a great idea.  But it is difficult to evaluate unless we know your true intent.  (Certainly you aren't working with sashelp.class in real life.)  Just in case you remain steadfast in pursuing your original question, here is a macro to do that.

 

%macro all25;

 

  %local j_list k_list j k  j_index k_index;

  %let j_list = 1 3 6 9 12;

  %let k_list = 1 3 6 9 12;

 

  %do j_index=1 %to 5;

      %let j = %scan(&j_list, &j_index);

      %do k_index=1 %to 5;

         %let k = %scan(&k_list, &k_index);

         data my_class&j&k;

            set sashelp.class;

            height&j = height * &j;

            weight&k = weight * &k;

         run;

      %end;

%end;

 

%mend all25;

 

%all25

 

The program has to jump through some minor hoops, because macro language imposes restrictions on what forms of the %DO statement are available.

View solution in original post

5 REPLIES 5
andreas_lds
Jade | Level 19

Why do you want those datasets? Sounds like a very, very strange requirement. Problem can be solved by using two nested loops in data-null-step or macro.

RW9
Diamond | Level 26 RW9
Diamond | Level 26

That really is not a good approach.  If you go that way then every proc or datastep you write from that point on will have to be duplicated for each dataset.  Unless its for an export of data or report, its never a good idea to split data up - SAS is geared towards using what is called by groups (which are simpler to program with and faster).  So say for your example, a simpler way would be:

data want;
  set sashelp.class;
  do j=3;
    do k=6;
      output;
    end;
  end;
run;

In this way you have one dataset to work with, with a fixed set of variables (ie. they are all height weight so no need to mess around with arrays), and you can by group on the j and k variables e.g:

proc print data=want;
  by j k;
  title "Group #byval1 section #byval2";
run;

So much simpler than trying to loop each time.

Astounding
PROC Star

The previous posters might be right.  This might not be a great idea.  But it is difficult to evaluate unless we know your true intent.  (Certainly you aren't working with sashelp.class in real life.)  Just in case you remain steadfast in pursuing your original question, here is a macro to do that.

 

%macro all25;

 

  %local j_list k_list j k  j_index k_index;

  %let j_list = 1 3 6 9 12;

  %let k_list = 1 3 6 9 12;

 

  %do j_index=1 %to 5;

      %let j = %scan(&j_list, &j_index);

      %do k_index=1 %to 5;

         %let k = %scan(&k_list, &k_index);

         data my_class&j&k;

            set sashelp.class;

            height&j = height * &j;

            weight&k = weight * &k;

         run;

      %end;

%end;

 

%mend all25;

 

%all25

 

The program has to jump through some minor hoops, because macro language imposes restrictions on what forms of the %DO statement are available.

vickyCh
Obsidian | Level 7

I'm sorry to bother all of you, and meanwhile thank you for your support.
I just arbitrarily chose two statements to test if (j,k) can work properly. At the same, my intention for this is that I can easily find the report corresponding to different (j,k).
Astounding’s reply was exactly what we wanted.

 

PeterClemmensen
Tourmaline | Level 20

the solutions provided are probably sound, but I am curious as to why you want to do this?

SAS Innovate 2025: Register Now

Registration is now open for SAS Innovate 2025 , our biggest and most exciting global event of the year! Join us in Orlando, FL, May 6-9.
Sign up by Dec. 31 to get the 2024 rate of just $495.
Register now!

What is Bayesian Analysis?

Learn the difference between classical and Bayesian statistical approaches and see a few PROC examples to perform Bayesian analysis in this video.

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
  • 5 replies
  • 1163 views
  • 0 likes
  • 5 in conversation