did something similar to what you are trying to do in a one of my codes. Getting it to work definitely required some creative thinking. I've tried this within a macro statement before, and it works: %syslput _global_/like=%unquote(%bquote(')e_construction_type*%bquote(')) remote=EUSD; I had to use a wildcard in the "like" clause for the code I run. The macromars wouldn't copy to the the remote server without the wildcard in the "like" clause. I don't know if that makes a difference for your code or not. I have included an example of the code I use below in case any of it might be of help. In my code, I have to create some email distribution lists used later in the code, and then output them to the log for validation on a remote server to demonstrate that they copied over. I was to lazy to hard code each put statement for the long list of vendors. So i had to work some magic with nesting macrovars within macrovars within macrovars... to incorporate the macrovars i needed into a looped %put statement. The code looks a little insane, but it works. I put the relevant SYSLPUT section bold and in italics. In the first section, I create a series of macro variables inside of a macro statement that I need to be global macro vars. So I make them global macro vars. In the second section I output them to the log locally. I didn't use the like clause in the SYSLPUT in my original code, but I tried incorporating it as demonstrated below, and the macrovars that met the criteria I specified still carried over to the remote session. Let me know if it works for you or if you have any other questions. I'll try to answer if I can. /* ======================================================================================================================= Create List of MacroVar Names ======================================================================================================================= */ proc sql noprint; select distinct DL into :VNDLIST_ separated by " " from EmailDG_1; quit; %PUT Vendor List = &VNDLIST_.; /* ======================================================================================================================= Create DG For Each Vendor Using MacroVar Names generated in previous step ======================================================================================================================= */ %MACRO CreateEmailDGs; %let i=1; %do %until (%scan(&VNDLIST_,&i)=); %global %scan(&VNDLIST_,&i); %let vl=%scan(&VNDLIST_,&i); %global %scan(&VNDLIST_,&i); proc sql noprint; select distinct Email INTO :&VL Separated by " | " From EmailDG_1 where Vendor=SUBSTR(%unquote(%quote("&VL.")),1,LENGTH(%unquote(%quote("&VL.")))-3); /*<<=The vendor names I need are included in the macrovar list here, i had to scan thru this macrovar list and extract the vendor names with a substring*/ quit; %let i=%eval(&i+1); %end; %Mend CreateEmailDGs; %CreateEmailDGs; /* ======================================================================================================================= Output DG Lists to Log for Validation ======================================================================================================================= */ options nosymbolgen; /* MACRO LOOP - OUTPUT Values of MacroVars TO LOG */ %macro MVar2Log; %let i=1; %do %until (%scan(&VNDLIST_,&i)=); %let vl=%scan(&VNDLIST_,&i); data _null_; mac='&'; vl="&vl"; value&i=compress(mac||vl); Call Symput("value&i",value&i); run; %put "**** &vl = &&value&i." ; %let i=%eval(&i+1); %end; %syslput _global_/like=%unquote(%bquote(')*DL%bquote(')) remote=rhost; %mend MVar2Log; %MVar2Log; rsubmit rhost; put "**** VendorName1_DL = &VendorName1_DL." ; put "**** VendorName2_DL = &VendorName2_DL." ; put "**** VendorName3_DL = &VendorName3_DL." ; put "**** VendorName4_DL = &VendorName4_DL." ; put "**** VendorName5_DL = &VendorName5_DL." ; put "**** VendorName6_DL = &VendorName6_DL." ; endrsubmit; The content of the output to the log from the final loop with the %put statement is similar to what i have posted below. Instead of VendorName#, of course, is the name of the vendor. And the email distribution lists are longer and contain valid email addresses. And it generates a lot more put statements than what you see below.... But you get the idea. "**** VendorName1_DL = recipient1@emaildomain.com | recipient2@emaildomain.com" NOTE: DATA statement used (Total process time): real time 0.00 seconds cpu time 0.00 seconds "**** VendorName2_DL = recipient1@emaildomain.com | recipient2@emaildomain.com" NOTE: DATA statement used (Total process time): real time 0.00 seconds cpu time 0.00 seconds "**** VendorName3_DL = recipient1@emaildomain.com | recipient2@emaildomain.com" NOTE: DATA statement used (Total process time): real time 0.00 seconds cpu time 0.00 seconds "**** VendorName14_DL = recipient1@emaildomain.com | recipient2@emaildomain.com" NOTE: DATA statement used (Total process time): real time 0.00 seconds cpu time 0.00 seconds "**** VendorName5_DL = recipient1@emaildomain.com | recipient2@emaildomain.com" NOTE: DATA statement used (Total process time): real time 0.00 seconds cpu time 0.00 seconds "**** VendorName6_DL = recipient1@emaildomain.com | recipient2@emaildomain.com"
... View more