SAS将变量替换为变量';发送到远程服务器之前的s值
我是SAS的新手,正在尝试从远程服务器检索数据 下面是我试图在远程服务器上执行的代码: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
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,应为以下内容之一:带引号的字符串、数字常量、日期时间常量、缺少的值。