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

Good day to everyone.
Got some issue with...idk even what type of problem is...macro, arrays or even do loop.
%macro name(indata=, some_num=);
data &indata_new;

     set &indata;

array var_x_arr [*]  var_x1 - var_x&some_num.;
array var_y_arr [*]  var1_y - var&some_num._y;
    do j = 1 to dim(var_x_arr);
         if var_y_arr (j) = "Y" then do;
            col4 = var_x_arr(j);
         end;
    end;
run;
%mend;

%name(indata=A, some_num=2);
%name(indata=B, some_num=5);

So, the essence of my question is that I have 2 types of variables that are always together (var_x1 and var1_y)
In dataset A there are only 2 of them (that is, var_x1 var1_y and var_x2 var2_y)
In dataset B there are only 5 of them (that is, var_x1 - var_x5 and, accordingly, var1_y - var5_y)
var_x1 accepts text values
var2_y accepts either 'Y' or  'N'
But it gives an error "ERROR: Missing numeric suffix on a numbered variable list (var_x1 - var_x2)

 

already triing  "
array var_x_arr [&some_num.]  var_x1 - var_x&some_num.;
array var_y_arr [&some_num.]  var1_y - var&some_num._y;
    do j = 1 to  &some_num.; "
and different variants writing with these syntax( with $ and without, " to dim()" and so on) 

My version is 9.4

 

 

1 ACCEPTED SOLUTION

Accepted Solutions
Tom
Super User Tom
Super User

You cannot make a variable list using syntax like:

var1_y - var5_y

The number must be at the END of the name.

 

The best thing would be to change your variable names. So something like:

var_y1 - var_y5 

Otherwise you will need to use macro code to generate that goofy series of names.

array var_y_arr [*]  
%do i=1 to &some_num;
  var&i._y 
%end;
;

So that you get this SAS code generated.

array var_y_arr [*] var1_y var2_y var3_y var4_y var5_y ; 

 

View solution in original post

4 REPLIES 4
Tom
Super User Tom
Super User

You cannot make a variable list using syntax like:

var1_y - var5_y

The number must be at the END of the name.

 

The best thing would be to change your variable names. So something like:

var_y1 - var_y5 

Otherwise you will need to use macro code to generate that goofy series of names.

array var_y_arr [*]  
%do i=1 to &some_num;
  var&i._y 
%end;
;

So that you get this SAS code generated.

array var_y_arr [*] var1_y var2_y var3_y var4_y var5_y ; 

 

SMUGGLE
Fluorite | Level 6
"The number must at the END of the name" 🤦🤦🤦
EXACTLY
How could I forget about this.
Thanks a lot!)
PaigeMiller
Diamond | Level 26

Turn on the macro debugging tools by running this command

 

options mprint;

 

then run your macro again and show us the ENTIRE log (that's every single line, every single character, do NOT select just the error messages). Include the log in the window that appears when you click on the </> Icon. DO NOT SKIP THIS STEP.

PaigeMiller_0-1663012019648.png

--
Paige Miller
SMUGGLE
Fluorite | Level 6
It's already been done.

and i'm grateful for your attention to my question.
The main problem was in array variables name

sas-innovate-2024.png

Available on demand!

Missed SAS Innovate Las Vegas? Watch all the action for free! View the keynotes, general sessions and 22 breakouts on demand.

 

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.

Click image to register for webinarClick image to register for webinar

Classroom Training Available!

Select SAS Training centers are offering in-person courses. View upcoming courses for:

View all other training opportunities.

Discussion stats
  • 4 replies
  • 502 views
  • 4 likes
  • 3 in conversation