【问题标题】:SAS Data integration studioSAS 数据集成工作室
【发布时间】:2017-09-26 15:29:40
【问题描述】:

长期读者第一次提问。

使用 SAS Data Integration Studio,当您在表选项高级选项卡中创建汇总转换时,您可以自动将 where 语句添加到您的代码中。不幸的是,它添加了一些代码,使这个解析不正确。在 where 文本框中输入以下内容:

TESTFIELD = "TESTVALUE"

创造

%let _INPUT_options = %nrquote(WHERE = %(TESTFIELD = %"TESTVALUE%"%));

在代码中,使用了

proc tabulate data = &_INPUT (&_INPUT_options)

但解析为

WHERE = (TESTFIELD = "TESTVALUE")

                 _
                 22

错误:解析 WHERE 子句时出现语法错误。错误 22-322:语法 错误,期待以下之一:名称、带引号的字符串、 数字常量,日期时间常量, 缺失值,(, *, +, -, :, INPUT, NOT, PUT, ^, ~.

我的问题是:有没有办法在 where 语句框中添加一个函数,允许在此处正确添加此引号?

请注意,所有函数在自动添加到 where 语句时都会获得前面的 %,我无法控制它。这似乎应该相对容易修复,但我还没有找到简单的方法。

【问题讨论】:

  • 您是否生成了 PROC TABULATE 代码?还是该工具也生成了它?那就是你可以添加 %UNQUOTE() 以删除在 %LET 语句中添加的宏引用吗?
  • 很遗憾没有,它是自动生成的。我唯一可以调整的部分是 where 语句的文本框。其他一切都是由此产生的。
  • 在这种情况下,请向 SAS 提出支持请求。也许有一些选项可以防止 DIS 添加宏引用。
  • 谢谢,我试试看。
  • 是的,如果 DIS 正在执行 all 这一切,那么这是 DIS 问题。如果您完全可以控制代码,则可以使用我的答案,但如果您的答案为零,则不能。

标签: sas integration where summary


【解决方案1】:

% 只是转义了 "() 字符;它们完全无害,真的。更大的问题是%NRQUOTE“引号”(它们是告诉SAS这是宏引用的非打印字符);他们搞砸了WHERE 处理。

使用%UNQUOTE( ... ) 删除这些。

例子:

data have;
  testfield="TESTVALUE";
  output;
  testfield="AMBASDF";
  output;
run;

%let _INPUT_options = %nrquote(WHERE = %(TESTFIELD = %"TESTVALUE%"%));
%put &=_input_options;

data want;
  set have(%unquote(&_INPUT_options.));
run;

【讨论】:

  • 感谢您的回复。不幸的是,%NRQUOTE 是系统在填充 where 文本框时生成的,并且无法在该文本框之外进行编辑。在 where 语句中放置 %UNQOUTE 会将错误移至 %UNQOUTE 的开头,并且似乎无法解决 %UNQOUTE
【解决方案2】:

感谢大家的回复。长话短说,我最终创建了 SAS 故障排除票。分析师告诉我,他们现在已经记录了这个问题,现在应该在未来的 DI 迭代中解决这个问题。

临时解决方案是创建一个新的转换,稍作改动,在输入选项之前在源代码中添加一个 UNQOUTE(如上面乔所说):

proc 制表数据 = &_INPUT (%unquote(&_INPUT_options)) %unquote(&procOptions);

对于那些感兴趣的人,您需要在项目的公共子文件夹中创建转换,以便其他人可以使用它。不是我所希望的,而是等待版本更新时的可行解决方案。

【讨论】:

    猜你喜欢
    • 2021-12-23
    • 1970-01-01
    • 1970-01-01
    • 2021-07-25
    • 1970-01-01
    • 1970-01-01
    • 2021-09-21
    • 2015-10-02
    • 2020-01-19
    相关资源
    最近更新 更多