将宏变量作为格式

Put with macro variable as format

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

我希望能够将我的 put 信息格式设置为变量 num 中的格式。

我收到错误“需要一个算术表达式” 我的代码中出现“该符号无法识别并将被忽略”和“语法错误”。 (强调 &fmt. 部分)


if pt=&type;

call symput("fmt",pt);

fmt_mean = putn(mean,&fmt.);

在此先感谢您的帮助。

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

但是因为你使用的是PUTN()函数,它可以使用实际变量的值,所以没有必要把格式放到宏变量中。

fmt_mean = putn(mean,pt);

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

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

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

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

如果您想了解 SAS 宏的工作原理以及 call symput 的作用,请点击此处: