SAS将变量替换为变量';发送到远程服务器之前的s值

SAS将变量替换为变量';发送到远程服务器之前的s值,sas,sas-macro,Sas,Sas Macro,我是SAS的新手,正在尝试从远程服务器检索数据 下面是我试图在远程服务器上执行的代码: rsubmit; libname abc'server/sasdata'; *This is where the datasets are located; data all2009; set abc.file_2007:; by index date time; where index in (var1) and time between '8:30:00't and '12

我是SAS的新手,正在尝试从远程服务器检索数据

下面是我试图在远程服务器上执行的代码:

rsubmit;
libname abc'server/sasdata'; *This is where the datasets are located;   
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;
目前,我正在尝试传递变量
var1
,该变量包含“查询”所需的字符串
index
var1
在我的本地计算机上计算,并包含值
'abc'

但是,由于
var1
是在本地计算的,因此尝试引用远程服务器上的变量会产生错误,因为
var1
不存在

如果按如下方式运行代码(显式值为
'abc'
),则运行正常:

...
set abc.file_2007:; 
by index date time;
where index in ('abc') and time between '8:30:00't and '12:00:00't;
...
我需要动态运行这个“查询”。在尝试执行
rsubmit
endrsubmit
中包含的代码之前,是否有办法强制将
var1
替换为其实际值(即
'abc'


更新: 完整的代码(我省略了远程服务器特定的代码,但我能够毫无问题地连接):

使用此代码,
PROC PRINT
语句正确打印一个表,显示
var
变量及其值。
TITLE
语句正确地计算
i
m
变量,但将
var1
全部关闭

proc export
语句创建正确的CSV文件,其中包含每个
var
变量的预期值

正如建议的那样,我试图将
var
变量声明为全局变量,但似乎没有任何效果。代码仍然无法将
var1
变量正确传递到远程服务器

同样,如果我用变量的实际字符串值替换
&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.

是否本例中的
WHERE
子句不能接受变量?

如果将VAR1值放入宏变量中,在本地计算机/会话中,可以使用%SYSLPUT命令将该宏传递给远程服务器

您可以将它放在SIGNON和RSUBMIT命令之间

Signon;
%SYSLPUT VAR1=&var1;
RSubmit;

然后&VAR1在远程会话中可用。根据您在&VAR1中传递的内容,您可能需要一些宏引用。如果此方法有问题,请发布该值。

如果将VAR1值放入宏变量中,在本地计算机/会话中,可以使用%SYSLPUT命令将该宏传递给远程服务器

您可以将它放在SIGNON和RSUBMIT命令之间

Signon;
%SYSLPUT VAR1=&var1;
RSubmit;

然后&VAR1在远程会话中可用。根据您在&VAR1中传递的内容,您可能需要一些宏引用。如果您对此方法有问题,请发布该值。

谢谢您的发布。我以前确实尝试过这个解决方案,但无法使其发挥作用。当我尝试运行它时,我在日志中得到
警告:明显的符号引用VAR1未解析。
,查询失败。本地
VAR1
本身是在宏中创建的。我不确定我错过了什么。。。(
var1
的实际值为
'XXE'
)。一些附加信息:
var1
是从CSV文件导入的字符变量。我刚刚注意到,我可以通过
PROC PRINT
PROC EXPORT
输出这个变量,但无法在
PROC PRINT
语句的
TITLE
中解析它——它显示为“test-&var1”。我不确定这是怎么回事。我觉得宏中的局部变量的作用域不正确。在macroland中没有“char variable”这样的东西,所以不用担心——每个宏变量都是文本。如果您在宏中创建它,但需要将其传递到该宏之外,则可能需要将其作为全局变量。我看不出您创建了&VAR1。这可以解释为什么你会收到警告。我一直在使用这个方法,它确实有效。我尝试过,但它产生了相同的错误(我更新了上面的代码以反映这一点)。我还得到以下信息:
错误22-322:语法错误,应为以下内容之一:带引号的字符串、数字常量、日期时间常量、缺少的值。
谢谢您的帖子。我以前确实尝试过这个解决方案,但无法使其发挥作用。当我尝试运行它时,我在日志中得到
警告:明显的符号引用VAR1未解析。
,查询失败。本地
VAR1
本身是在宏中创建的。我不确定我错过了什么。。。(
var1
的实际值为
'XXE'
)。一些附加信息:
var1
是从CSV文件导入的字符变量。我刚刚注意到,我可以通过
PROC PRINT
PROC EXPORT
输出这个变量,但无法在
PROC PRINT
语句的
TITLE
中解析它——它显示为“test-&var1”。我不确定这是怎么回事。我觉得宏中的局部变量的作用域不正确。在macroland中没有“char variable”这样的东西,所以不用担心——每个宏变量都是文本。如果您在宏中创建它,但需要将其传递到该宏之外,则可能需要将其作为全局变量。我看不出您创建了&VAR1。这可以解释为什么你会收到警告。我一直在使用这个方法,它确实有效。我尝试过,但它产生了相同的错误(我更新了上面的代码以反映这一点)。我还得到以下信息:
ERROR 22-322:Syntax ERROR,应为以下内容之一:带引号的字符串、数字常量、日期时间常量、缺少的值。