DATA Step, Macro, Functions and more

How to extract 1st word to nth word from a string variable and output as a string variable?

Accepted Solution Solved
Reply
Contributor
Posts: 37
Accepted Solution

How to extract 1st word to nth word from a string variable and output as a string variable?

Dear Experts

 

%let XTEMPLIST  =  BA EN CO CA SV IN UT TRA;

 

  proc iml;
    s="&xtemplist";
    delims = ' ';
    n = countw(s, delims);
    xtemplist1 = scan(s, 1:3, delims);

    xtemplist2 = scan(s, 4:n, delims);
    print xtemplist1;
    call symput("t",xtemplist1);

    call symput("t1",xtemplist2);
  quit;

%put &t;  

%put &t1;  


>> t-->only CO is displayed. How to get BA EN CO?     

t1->>TRA is displayed. How to get CA SV IN UT TRA?

 

Thank you for your help

:LL


Accepted Solutions
Solution
‎05-18-2017 10:13 AM
Super User
Posts: 5,099

Re: How to extract 1st word to nth word from a string variable and output as a string variable?

Here's a way that keeps all the processing under the control of macro language. 

 

%let XTEMPLIST  =  BA EN CO CA SV IN UT TRA;

 

%macro split (n=3);

 

%GLOBAL XTEMPLIST1 XTEMPLIST2;

%let xtemplist1=;

%local i;

 

%do i=1 %to &n;

   %let xtemplist1 = &xtemplist1 %scan(&xtemplist, &i);

%end;

 

%let xtemplist2 = %substr(xtemplist, %length(&xtemplist1) + 1);

 

%mend split;

 

%split (n=3)

 

Because of the %do loop, you will need to define a macro.  On the other hand, you gain the advantage of being able to control how many words are selected into the first variable.

View solution in original post


All Replies
Solution
‎05-18-2017 10:13 AM
Super User
Posts: 5,099

Re: How to extract 1st word to nth word from a string variable and output as a string variable?

Here's a way that keeps all the processing under the control of macro language. 

 

%let XTEMPLIST  =  BA EN CO CA SV IN UT TRA;

 

%macro split (n=3);

 

%GLOBAL XTEMPLIST1 XTEMPLIST2;

%let xtemplist1=;

%local i;

 

%do i=1 %to &n;

   %let xtemplist1 = &xtemplist1 %scan(&xtemplist, &i);

%end;

 

%let xtemplist2 = %substr(xtemplist, %length(&xtemplist1) + 1);

 

%mend split;

 

%split (n=3)

 

Because of the %do loop, you will need to define a macro.  On the other hand, you gain the advantage of being able to control how many words are selected into the first variable.

Super User
Posts: 9,691

Re: How to extract 1st word to nth word from a string variable and output as a string variable?

HoHo. You are doing this under IML code. You really want do this via IML ?

 

%let XTEMPLIST  =  BA EN CO CA SV IN UT TRA;
 
  proc iml;
    s="&xtemplist";
    delims = ' ';
    n = countw(s, delims);
    xtemplist1 = scan(s, 1:3, delims);
    xtemplist2 = scan(s, 4:n, delims);
    print xtemplist1;
    call symput("t",rowcat(xtemplist1+' '));
    call symput("t1",rowcat(xtemplist2+' '));
  quit;
%put &t;  
%put &t1;  
☑ This topic is solved.

Need further help from the community? Please ask a new question.

Discussion stats
  • 2 replies
  • 121 views
  • 0 likes
  • 3 in conversation