【问题标题】:Put with macro variable as format以宏变量为格式
【发布时间】:2021-12-29 17:58:36
【问题描述】:

我有一个数据集,其中有一个名为 pt 的变量,其观测值为 8.1、8.2、8.3 等,还有一个名为 mean 的变量,其值为 8.24 8.1 8.234 等。它们相互配对。

我希望能够将我的 put informat 设置为来自变量 num 的格式。

我收到错误“期望算术表达式” 我的代码中的“符号无法识别并将被忽略”和“语法错误”。 (在 &fmt. 部分下划线)


if pt=&type;

call symput("fmt",pt);

fmt_mean = putn(mean,&fmt.);

提前感谢您的帮助。

【问题讨论】:

  • 您通常无法在创建宏变量的同一步骤中访问宏变量,在这种情况下,您可以使用已定义的值。你能用一个更有代表性的例子来说明你的问题吗?
  • 如果您的示例正确且具有代表性,则以下内容将起作用:fmt_mean = putn(mean, pt);

标签: sas sas-macro


【解决方案1】:

宏处理器的工作在 SAS 编译和运行数据步骤之前完成。所以试图将值放入宏变量中,然后立即使用它来生成和执行 SAS 代码是行不通的。

但是由于使用的是 PUTN() 函数,它可以使用实际变量的值,因此无需将格式放入宏变量中。

fmt_mean = putn(mean,pt);

【讨论】:

  • 开始写我自己的xD时没有看到你的答案
【解决方案2】:

请发布您的数据集和数据步骤。你的描述很难理解。

但是解决方案似乎很简单:不要使用宏变量!你在这里不需要它们。与 put() 函数不同,它期望格式在编译时知道(即当你可以使用宏变量时),它的模拟 putn() 期望第二个参数是可变的。当然,由于许可,它的工作速度会慢一些。所以你的代码看起来像这样:

data ...;
    set ...(keep=mean pt);
    fmt_mean = putn(mean, pt);
run;

其中pt 变量可能是数字,即 8.2,或字符,即 '8.2'。

如果您想了解 SAS 宏的工作原理以及 call symput 的作用,请参见此处: https://stackoverflow.com/a/69979074/7864377

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-22
    相关资源
    最近更新 更多