- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
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.
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
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.
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
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;