首页 > 解决方案 > SAS:如何在数据步骤中添加带括号和引号的值?

问题描述

我想使用 SAS 中的数据步骤创建一个表,其中包含 SSRS 的显示格式代码。

例如,我有一些类似 '#,0;(#,0)' 的代码,但是当我尝试在数据步骤中分配此值时出现错误。我也尝试先将其放入宏中,但没有帮助。

代码:

%let fmt1 = %STR(#,0;(#,0)); *thousand-comma separator;

data FORMAT_XREF;   
    length METRIC_TYPE DSP_FORMAT $ 20;

    if  METRIC_TYPE = 'TOT_ACCT' then
            do;
                DSP_FORMAT = quote(&fmt1.);
            end;
run;

错误:34 #,0;(#,0) _ _ 386 180 _ 76 错误 386-185:需要算术表达式。

错误 180-322:语句无效或使用顺序不正确。

ERROR 76-322:语法错误,语句将被忽略。

标签: sasenterprise-guidedatastep

解决方案


您的问题是您认为该quote函数的作用与其不同。

quote 函数将双引号字符添加到某些内容,而不是用于分隔字符值的引号。它仍然需要一个字符值作为输入,而您没有提供它(宏变量包含文本,而不是字符值,请记住)。

所以你需要:

%let fmt1 = %STR(#,0;(#,0)); *thousand-comma separator;

data FORMAT_XREF;   
    length METRIC_TYPE DSP_FORMAT $ 20;

    if  METRIC_TYPE = 'TOT_ACCT' then
            do;
                DSP_FORMAT = "&fmt1.";
            end;
run;

这对你来说应该很好。如果您实际上还需要值中的引号,则可以将函数包装在该值周围quote因此DSP_FORMAT = quote("&fmt1.");将存储"#,0;(#,0)"在变量中,包括"字符)。


推荐阅读