已解决(根据 Neil Neyman 的评论):
&var1不一样var1。
DATA local.trow; 
    INFILE csvfile FIRSTOBS=&i OBS=&i;
    INPUT var1 $ var2 $ var3 $ var4 $;
    call symput('var1',var1); *Added line;
    call symput('var2',var2); *Added line;
    call symput('var3',var3); *Added line;
    call symput('var4',var4); *Added line;
RUN;
添加标有“*Added line;”的行 解决了这个问题。
问题
免责声明:我对 SAS 非常陌生,并且一直在努力解决此代码中的问题。
在一个循环中,我试图从 CSV 文件中导入字符串变量,然后我将其中一个传递给远程服务器 ( var1),但我遇到了问题。如果我%let var1 = 'XXE';在代码顶部包含并排除我从 csv 文件中提取变量的部分,远程执行工作正常并且我得到我期望的输出。  
但是,如果我按原样运行代码,它似乎不会按预期处理字符串变量。例如,该PROC PRINT语句产生了预期的输出(即它显示了 4 个变量),但标题没有正确显示——它似乎var1完全被跳过,而i(值为 1)和m(值为 2007 ) 显示。标题显示为“Title - 1 2007”。日志在标题行附近显示以下错误:
WARNING: Apparent symbolic reference VAR1 not resolved.
远程提交也不起作用,而是在突出显示时产生以下错误&VAR1:
ERROR: Syntax error while parsing WHERE clause.
ERROR 22-322: Syntax error, expecting one of the following: a quoted string,
              a numeric constant, a datetime constant, a missing value.   
我真的对这个错误感到困惑,因为该PROC PRINT语句能够打印变量(实际上在视觉上看起来像是字符串)。“引用字符串”是不同类型的变量吗?
如果我var1在代码顶部显式声明或手动输入'XXE'子句WHERE,则执行远程查询。
难道是我错误地处理了文本文件?它看起来像这样:
XXE XXA XXB XXC
XXM XXN XXI XXP
...
我的代码:
LIBNAME local 'C:\...\Pulled Data\New\';
FILENAME csvfile 'C:\...\Pulled Data\New\indexes.txt';
%macro getthedata(nrows,ystart,yend); *nrows is the number of rows in the text file;
    %GLOBAL var1 var2 var3 var4;
    %do i=1 %to &nrows;
        %do m=&ystart %to ¥d;
            DATA local.trow; 
               INFILE csvfile FIRSTOBS=&i OBS=&i;
               INPUT var1 $ var2 $ var3 $ var4 $;
            RUN;
            PROC PRINT DATA = local.trow;
            TITLE "Title - &i. &var1. &m";
            var var1 var2 var3 var4;
            RUN;
            proc export data=local.trow
                outfile="C:\...\Pulled Data\New\Indices_&i._&m..csv"
                dbms=csv replace;
            run;
            signon username=_prompt_;
            %syslput VAR1 = &var1;
            rsubmit;
                    libname abc'server/sasdata';    
                    data all2009;
                         set abc.file_2007:; 
                         by index date time;
                         where index in (&VAR1) and time between '8:30:00't and '12:00:00't;
                    run;
            endrsubmit;
        %end;
    %end;
%mend getthedata;
Options MPRINT;
%getthedata(1,2007,2007)