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

Hi,

I have a macro which creates a dataset which size depends on the input :

Columns names : a_1, a_2, a_3, a_4 ... .

 

I want to compute the mean of all the columns but the first two in the macro :

DATA want;
	SET have;
	mean_value=mean(a_3, a_4 ....);
RUN;

How can I dynamically select the columns ? (I know all the columns' name)

Maybe with columns' index/position (Mean on the 3rd column to the last one) ?

 

Gluttony

1 ACCEPTED SOLUTION

Accepted Solutions
PaigeMiller
Diamond | Level 26

Well, if the variables of interest all begin with a_ then you can use something like this:

 

mean_value = mean(of a_3-a_19);

 

--
Paige Miller

View solution in original post

7 REPLIES 7
PaigeMiller
Diamond | Level 26

Well, if the variables of interest all begin with a_ then you can use something like this:

 

mean_value = mean(of a_3-a_19);

 

--
Paige Miller
Gluttony
Fluorite | Level 6
Thank you !!!!
That's perfect !
Gluttony
ballardw
Super User

Is your issue that you do not know how many a_ variables there are and need help determining that?

 

Will you guarantee that there will always be 3 or more values?

Then perhaps:

data want;
   set have;
   array aa a_: ;
   mean_value = (sum (of aa(*)) - sum(a_1,a_2))/(n (of aa(*)) - 2);
run;

but you would need to check how many values are in the AA array if you can't be sure there are always 3 or more.

PaigeMiller
Diamond | Level 26

@ballardw wrote:

Is your issue that you do not know how many a_ variables there are and need help determining that?

 

Will you guarantee that there will always be 3 or more values?

Then perhaps:

data want;
   set have;
   array aa a_: ;
   mean_value = (sum (of aa(*)) - sum(a_1,a_2))/(n (of aa(*)) - 2);
run;

but you would need to check how many values are in the AA array if you can't be sure there are always 3 or more.


Doesn't work if a_1 and/or a_2 is missing, the denominator will be wrong.

--
Paige Miller
ballardw
Super User

@PaigeMiller wrote:

@ballardw wrote:

Is your issue that you do not know how many a_ variables there are and need help determining that?

 

Will you guarantee that there will always be 3 or more values?

Then perhaps:

data want;
   set have;
   array aa a_: ;
   mean_value = (sum (of aa(*)) - sum(a_1,a_2))/(n (of aa(*)) - 2);
run;

but you would need to check how many values are in the AA array if you can't be sure there are always 3 or more.


Doesn't work if a_1 and/or a_2 is missing, the denominator will be wrong.


Yep.

Incomplete data description => incomplete response.

Gluttony
Fluorite | Level 6

In my case, the columns were :

a_1, a_2, b_1, b_2, b_3 .... b_n

and I wanted to compute the mean on the "b" columns,

So @PaigeMiller's trick (before the edit) about using :

mean(of b:)

is perfect.
Thank you,

Gluttony

PaigeMiller
Diamond | Level 26

as long as there are no other variables whose name starts with B in your data set, that would work. For example, if your data set also contains variable BirthYear then the B: in the MEAN function won't work.

--
Paige Miller

sas-innovate-wordmark-2025-midnight.png

Register Today!

Join us for SAS Innovate 2025, our biggest and most exciting global event of the year, in Orlando, FL, from May 6-9. Sign up by March 14 for just $795.


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
  • 7 replies
  • 1210 views
  • 2 likes
  • 3 in conversation