BookmarkSubscribeRSS Feed
☑ This topic is solved. Need further help from the community? Please sign in and ask a new question.
Hello_there
Lapis Lazuli | Level 10

Hi,

 

This is a data manipulation exercise. I'm trying to use the following data to macrotize the values in 4 out of the 5 variables. I'm new to the arrays, but i'm not sure what i'm doing wrong.

 

Here is the data:

data have; 
infile datalines dsd dlm=",";
	input word1 $ word2 $ word3$ word4$ word5$;
datalines;
We, are, here, now., pretzel
;
run;

My code doesn't work. I want to only macrotize the the values from word1 to word4. Thanks

 

data _null_; set have;

array word[4] word1--word4;
do i=1 to 4;

	call symput('word[i]', word[i]);
end;
run;

The desired outcome:

 

I want to create 4 macro variables that are named the following, "word1", "word2", "word3", "word4", using only the variables word1, word2, word3, word4

 

Thanks

1 ACCEPTED SOLUTION

Accepted Solutions
PaigeMiller
Diamond | Level 26

The first argument of call symput ought to be a text string containing the name of the macro variable you want to create. 

 

call symput('word[i]', word[i]);

 

creates macro variables with the name of text string in the first argument to call symput, so you are creating macro variables with the (illegal) name of word[i] and so macro variables cannot be created. Instead, you need to make the first argument of call symput a valid text string, such as word1 word2 etc.

 

call symput(cats('word',i), word[i]);

 

The first argument, when the loop variable I is equal to 1, cats('word',i) equals word1 so a macro variable named WORD1 is created with the value of word[1]

 

--
Paige Miller

View solution in original post

4 REPLIES 4
PaigeMiller
Diamond | Level 26

The first argument of call symput ought to be a text string containing the name of the macro variable you want to create. 

 

call symput('word[i]', word[i]);

 

creates macro variables with the name of text string in the first argument to call symput, so you are creating macro variables with the (illegal) name of word[i] and so macro variables cannot be created. Instead, you need to make the first argument of call symput a valid text string, such as word1 word2 etc.

 

call symput(cats('word',i), word[i]);

 

The first argument, when the loop variable I is equal to 1, cats('word',i) equals word1 so a macro variable named WORD1 is created with the value of word[1]

 

--
Paige Miller
Tom
Super User Tom
Super User

First thing is that unless you really have a pressing need to insert leading and/or trailing spaces into the macro variables you should not be using ancient CALL SYMPUT() routine.  Use CAL SYMPUTX() instead.

 

You can use CATS() to append the integer to the macro variable name.

call symputx(cats('word',i), word[i]);
Hello_there
Lapis Lazuli | Level 10
I actually do in my case need to have leading and trailing space. I know it's rare.

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