在内部运行宏_NULL_

 神奇伟哥 发布于 2023-02-08 14:58

我有这些数据,我想使用宏更新某个表

DATA WORK.t1;
    LENGTH
        POLICY_RK          8
        POLICY_VERSION     8
        TREATMENT_IND      8 ;
    FORMAT
        POLICY_RK        BEST12.
        POLICY_VERSION   BEST12.
        TREATMENT_IND    BEST12. ;
    INFORMAT
        POLICY_RK        BEST12.
        POLICY_VERSION   BEST12.
        TREATMENT_IND    BEST12. ;
    INFILE DATALINES4
        DLM='7F'x
        MISSOVER
        DSD ;
    INPUT
        POLICY_RK        : BEST32.
        POLICY_VERSION   : BEST32.
        TREATMENT_IND    : BEST32. ;
DATALINES4;
105000002
114000005
123000007
132000001
141000007
1508
;;;;

我正在尝试运行以下代码:

     %macro storno (pol_rk , pol_ver );
       PROC SQL;
            UPDATE t1
            SET POLICY_VERSION=POLICY_VERSION*3.1113
            where POLICY_RK=&pol_rk and policy_Version = &pol_ver;
       QUIT;
 %mend ;





 data _null_;
       set t1 ;

       IF input(TREATMENT_IND,best12.) eq 1  THEN do;
            call symputx("a",policy_rk);
            call symputx("b",pol_ver);
            end;
            %storno(&a, &b);



       %put a=&a;
        %put b=&b;
 run;

但收到一条警告信息:

警告:未解析显式符号引用A. 警告:未解析表观符号引用B. 注意:数字值已在以下位置转换为字符值:(行):(列).19:21
注意:从数据集WORK.T1中读取了6个观察值.注意:使用的DATA语句(总处理时间):实时0.00秒cpu时间0.00秒

注意:WORK.T1中没有更新任何行.

这到底我到底做错了什么......?

1 个回答
  • CALL SYMPUTX 将值分配给宏变量,但这些宏变量在分配它们的DATA步骤结束之后才可用.

    那是因为宏语言在数据步骤结果之前编译.所以SAS %storno(&a, &b)在处理DATA步骤之前看到你的调用,以分配宏变量&a&b.

    有关详细信息,请参阅此链接的"试图引用的问题..."小节:https://support.sas.com/documentation/cdl/en/mcrolref/61885/HTML/default/viewer.htm#a000210266.htm

    这就是为什么你看到关于符号引用未被解决的警告 - 当你试图使用它们时它们还不存在.

    2023-02-08 14:59 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有