【问题标题】:Referencing a macro variable created by a prompt SAS EG引用由提示 SAS EG 创建的宏变量
【发布时间】:2018-09-17 16:31:27
【问题描述】:

我在 SAS EG 中创建了一个提示,它接受文本输入并创建名为“variableName”的宏变量。

我试图像这样引用这个宏变量:

proc sql;
create table MyTable as
   select * from Source_Table as a
   where a.field = &variableName ;

这给了我一个错误,上面写着:“语法错误,需要以下之一:名称、带引号的字符串、数字常量、日期时间常量、缺失值、BTRIM、INPUT、PUT、SUBSTRING、USER。 "

我也尝试将 &variableName 括在单引号和双引号中,但是当我这样做时,我没有得到任何结果。

当我使用查询构建器并根据提示过滤数据时,我能够引用提示,但我试图在计算表达式等中使用提示的值,以及在我编写的没有查询构建器的查询中。如何引用我在提示中创建的变量??

编辑:具有宏变量将具有的值的代码

proc sql;
create table MyTable as
    select * from Source_Table as a
    where a.field = 'NAME OF PERSON';

当我运行它时,我得到了我想要的结果。

【问题讨论】:

    标签: sas enterprise-guide


    【解决方案1】:

    它需要解析为有效的 SAS 代码。假设 &variableName 是一个字符串,那么它会是这样的:

    proc sql;
    create table MyTable as
       select * from Source_Table as a
       where a.field = "&variableName." ;
    

    如果这不起作用,请显示一个与宏变量具有相同值的查询。然后我们可以建议如何更改您的代码。

    编辑:根据您的评论,您没有与查询相关联的提示。右键单击查询并将提示链接到您的查询,它将在查询之前运行以提供值。

    【讨论】:

    • 是的,&variableName 是一个字符串。我试过了,但是没有弹出提示让我选择一个值,然后查询运行并且不返回任何结果。我将编辑我的问题并添加一个包含宏变量的查询。
    • 您是否设置了在该查询上调用的提示?您需要右键单击它并以某种方式连接它,但我现在不记得了。
    • 啊,我不知道我必须这样做。我做到了,它现在似乎正在工作!非常感谢。
    • 现在当我使用它时,它告诉我变量的值“在使用它的上下文中无效”你知道这可能意味着什么吗?
    • 宏变量从包含所有文本值的动态列表中提取。当我执行%put &variableName 时,它返回:NAME。当我运行我的创建表查询时,这没有返回任何内容。我研究并定义了一个新变量为%let newVar =%unquote(%str(%'&variableName%')); 这返回了'NAME'并在我引用&newVar的查询中为我工作
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多