SAS中%DMNORMIP和$的定义是什么?

SAS中%DMNORMIP和$的定义是什么?,sas,decision-tree,Sas,Decision Tree,我是一名R用户,我正在尝试在R中测试下面的SAS代码。我认为代码非常简单,除了以下两个困扰我的主题: 1.%DMNORMIP是什么意思? 2.美元做什么 ****************************************************************; ****** DECISION TREE SCORING CODE ******; *****************************************

我是一名R用户,我正在尝试在R中测试下面的SAS代码。我认为代码非常简单,除了以下两个困扰我的主题:

1.%DMNORMIP是什么意思?
2.美元做什么

****************************************************************;
******             DECISION TREE SCORING CODE             ******;
****************************************************************;

******         LENGTHS OF NEW CHARACTER VARIABLES         ******;
LENGTH I_BAD  $   12; 
LENGTH _WARN_  $    4; 

******              LABELS FOR NEW VARIABLES              ******;
label _NODE_ = 'Node' ;
label _LEAF_ = 'Leaf' ;
label P_BAD1 = 'Predicted: BAD=1' ;
label P_BAD0 = 'Predicted: BAD=0' ;
label Q_BAD1 = 'Unadjusted P: BAD=1' ;
label Q_BAD0 = 'Unadjusted P: BAD=0' ;
label I_BAD = 'Into: BAD' ;
label U_BAD = 'Unnormalized Into: BAD' ;
label _WARN_ = 'Warnings' ;


******      TEMPORARY VARIABLES FOR FORMATTED VALUES      ******;
LENGTH _ARBFMT_12 $     12; DROP _ARBFMT_12; 
_ARBFMT_12 = ' '; /* Initialize to avoid warning. */
LENGTH _ARBFMT_7 $      7; DROP _ARBFMT_7; 
_ARBFMT_7 = ' '; /* Initialize to avoid warning. */


******             ASSIGN OBSERVATION TO NODE             ******;
IF  NOT MISSING(DEBTINC ) AND 
  DEBTINC  <     45.1549076293408 THEN DO;
  IF  NOT MISSING(VALUE ) AND 
    VALUE  <             491495.5 THEN DO;
    _ARBFMT_12 = PUT( DELINQ , BEST12.);
     %DMNORMIP( _ARBFMT_12);
    IF _ARBFMT_12 IN ('2' ,'4' ,'3' ,'5' ,'7' ) THEN DO;
      _ARBFMT_12 = PUT( DELINQ , BEST12.);
       %DMNORMIP( _ARBFMT_12);
      IF _ARBFMT_12 IN ('7' ) THEN DO;
        _NODE_  =                   16;
        _LEAF_  =                    1;
        P_BAD1  =                    1;
        P_BAD0  =                    0;
        Q_BAD1  =                    1;
        Q_BAD0  =                    0;
        I_BAD  = '1' ;
        U_BAD  =                    1;
        END;
      ELSE DO;
        IF  NOT MISSING(DEBTINC ) AND 
          DEBTINC  <      19.590042161704 THEN DO;
          _NODE_  =                   26;
          _LEAF_  =                    2;
          P_BAD1  =                    1;
          P_BAD0  =                    0;
          Q_BAD1  =                    1;
          Q_BAD0  =                    0;
          I_BAD  = '1' ;
          U_BAD  =                    1;
          END;
        ELSE DO;
          _NODE_  =                   27;
          _LEAF_  =                    3;
          P_BAD1  =     0.18145161290322;
          P_BAD0  =     0.81854838709677;
          Q_BAD1  =     0.18145161290322;
          Q_BAD0  =     0.81854838709677;
          I_BAD  = '0' ;
          U_BAD  =                    0;
          END;
        END;
      END;
    ELSE DO;
      _ARBFMT_12 = PUT( DEROG , BEST12.);
       %DMNORMIP( _ARBFMT_12);
      IF _ARBFMT_12 IN ('3' ,'2' ,'4' ,'6' ) THEN DO;
        IF  NOT MISSING(CLNO ) AND 
                          34.5 <= CLNO  THEN DO;
          _NODE_  =                   29;
          _LEAF_  =                    5;
          P_BAD1  =                    1;
          P_BAD0  =                    0;
          Q_BAD1  =                    1;
          Q_BAD0  =                    0;
          I_BAD  = '1' ;
          U_BAD  =                    1;
          END;
        ELSE DO;
          _NODE_  =                   28;
          _LEAF_  =                    4;
          P_BAD1  =                 0.21;
          P_BAD0  =                 0.79;
          Q_BAD1  =                 0.21;
          Q_BAD0  =                 0.79;
          I_BAD  = '0' ;
          U_BAD  =                    0;
          END;
        END;
      ELSE DO;
        IF  NOT MISSING(CLNO ) AND 
          CLNO  <                  2.5 THEN DO;
          IF  NOT MISSING(YOJ ) AND 
                               2 <= YOJ  THEN DO;
            _NODE_  =                   39;
            _LEAF_  =                    7;
            P_BAD1  =                    1;
            P_BAD0  =                    0;
            Q_BAD1  =                    1;
            Q_BAD0  =                    0;
            I_BAD  = '1' ;
            U_BAD  =                    1;
            END;
          ELSE DO;
            _NODE_  =                   38;
            _LEAF_  =                    6;
            P_BAD1  =      0.1025641025641;
            P_BAD0  =     0.89743589743589;
            Q_BAD1  =      0.1025641025641;
            Q_BAD0  =     0.89743589743589;
            I_BAD  = '0' ;
            U_BAD  =                    0;
            END;
          END;
        ELSE DO;
          _NODE_  =                   31;
          _LEAF_  =                    8;
          P_BAD1  =     0.04780206581791;
          P_BAD0  =     0.95219793418208;
          Q_BAD1  =     0.04780206581791;
          Q_BAD0  =     0.95219793418208;
          I_BAD  = '0' ;
          U_BAD  =                    0;
          END;
        END;
      END;
    END;
  ELSE DO;
    _ARBFMT_12 = PUT( NINQ , BEST12.);
     %DMNORMIP( _ARBFMT_12);
    IF _ARBFMT_12 IN ('1' ,'0' ) THEN DO;
      _NODE_  =                   10;
      _LEAF_  =                    9;
      P_BAD1  =                    1;
      P_BAD0  =                    0;
      Q_BAD1  =                    1;
      Q_BAD0  =                    0;
      I_BAD  = '1' ;
      U_BAD  =                    1;
      END;
    ELSE DO;
      _NODE_  =                   11;
      _LEAF_  =                   10;
      P_BAD1  =                  0.4;
      P_BAD0  =                  0.6;
      Q_BAD1  =                  0.4;
      Q_BAD0  =                  0.6;
      I_BAD  = '0' ;
      U_BAD  =                    0;
      END;
    END;
  END;
ELSE DO;
  _ARBFMT_12 = PUT( DELINQ , BEST12.);
   %DMNORMIP( _ARBFMT_12);
  IF _ARBFMT_12 IN ('2' ,'1' ,'6' ,'4' ,'3' ,'5' ,'7' ) THEN DO;
    IF  NOT MISSING(CLAGE ) AND 
          345.933333333333 <= CLAGE  THEN DO;
      _NODE_  =                   13;
      _LEAF_  =                   12;
      P_BAD1  =     0.27272727272727;
      P_BAD0  =     0.72727272727272;
      Q_BAD1  =     0.27272727272727;
      Q_BAD0  =     0.72727272727272;
      I_BAD  = '0' ;
      U_BAD  =                    0;
      END;
    ELSE DO;
      _NODE_  =                   12;
      _LEAF_  =                   11;
      P_BAD1  =     0.83755274261603;
      P_BAD0  =     0.16244725738396;
      Q_BAD1  =     0.83755274261603;
      Q_BAD0  =     0.16244725738396;
      I_BAD  = '1' ;
      U_BAD  =                    1;
      END;
    END;
  ELSE DO;
    IF  NOT MISSING(CLAGE ) AND 
          178.100666666666 <= CLAGE  THEN DO;
      IF  NOT MISSING(YOJ ) AND 
        YOJ  <                  5.4 THEN DO;
        _NODE_  =                   24;
        _LEAF_  =                   16;
        P_BAD1  =      0.5045045045045;
        P_BAD0  =     0.49549549549549;
        Q_BAD1  =      0.5045045045045;
        Q_BAD0  =     0.49549549549549;
        I_BAD  = '1' ;
        U_BAD  =                    1;
        END;
      ELSE DO;
        IF  NOT MISSING(VALUE ) AND 
                         34050 <= VALUE  THEN DO;
          _NODE_  =                   37;
          _LEAF_  =                   18;
          P_BAD1  =      0.1988950276243;
          P_BAD0  =     0.80110497237569;
          Q_BAD1  =      0.1988950276243;
          Q_BAD0  =     0.80110497237569;
          I_BAD  = '0' ;
          U_BAD  =                    0;
          END;
        ELSE DO;
          _NODE_  =                   36;
          _LEAF_  =                   17;
          P_BAD1  =                 0.75;
          P_BAD0  =                 0.25;
          Q_BAD1  =                 0.75;
          Q_BAD0  =                 0.25;
          I_BAD  = '1' ;
          U_BAD  =                    1;
          END;
        END;
      END;
    ELSE DO;
      IF  NOT MISSING(VALUE ) AND 
                     20665.5 <= VALUE  THEN DO;
        _ARBFMT_7 = PUT( JOB , $7.);
         %DMNORMIP( _ARBFMT_7);
        IF _ARBFMT_7 IN ('OTHER' ,'OFFICE' ,'SALES' ,'MGR' ,'PROFEXE' ,
        'SELF' ) THEN DO;
          _NODE_  =                   34;
          _LEAF_  =                   14;
          P_BAD1  =     0.64634146341463;
          P_BAD0  =     0.35365853658536;
          Q_BAD1  =     0.64634146341463;
          Q_BAD0  =     0.35365853658536;
          I_BAD  = '1' ;
          U_BAD  =                    1;
          END;
        ELSE DO;
          _NODE_  =                   35;
          _LEAF_  =                   15;
          P_BAD1  =     0.19230769230769;
          P_BAD0  =      0.8076923076923;
          Q_BAD1  =     0.19230769230769;
          Q_BAD0  =      0.8076923076923;
          I_BAD  = '0' ;
          U_BAD  =                    0;
          END;
        END;
      ELSE DO;
        _NODE_  =                   22;
        _LEAF_  =                   13;
        P_BAD1  =     0.95652173913043;
        P_BAD0  =     0.04347826086956;
        Q_BAD1  =     0.95652173913043;
        Q_BAD0  =     0.04347826086956;
        I_BAD  = '1' ;
        U_BAD  =                    1;
        END;
      END;
    END;
  END;

****************************************************************;
******          END OF DECISION TREE SCORING CODE         ******;
****************************************************************;
********************************************************************************************************************;
******决策树评分代码*****;
****************************************************************;
******新字符变量的长度******;
长度为12美元;
长度为4美元;
******新变量的标签*****;
标签_NODE_u='NODE';
标签u LEAF u=‘LEAF’;
标签P_BAD1='预测:坏=1';
标签P_BAD0='预测:坏=0';
标签Q_BAD1=‘未调整的P:BAD=1’;
标签Q_BAD0='未调整的P:BAD=0';
标签I_BAD='Into:BAD';
标签U_BAD='未规范化为:BAD';
标签_WARN u=‘警告’;
******格式化值的临时变量*****;
长度12美元;下降_ARBFMT_12;
_ARBFMT_12='';/*初始化以避免警告*/
长度(7美元);;下降_ARBFMT_7;
_ARBFMT_7='';/*初始化以避免警告*/
******将观测值分配给节点******;
如果未丢失(债务人公司),以及
债务人公司<45.1549076293408,则执行;
如果未丢失(值),则为
值<491495.5,则执行;
_ARBFMT_12=投入(DELINQ,BEST12.);
%DMNORMIP(_ARBFMT_12);
如果在('2'、'4'、'3'、'5'、'7')中有_ARBFMT_12,则执行;
_ARBFMT_12=投入(DELINQ,BEST12.);
%DMNORMIP(_ARBFMT_12);
如果在('7')中有_ARBFMT_12,则执行;
_节点=16;
_叶=1;
P_BAD1=1;
P_BAD0=0;
Q_BAD1=1;
Q_BAD0=0;
I_BAD='1';
U_BAD=1;
结束;
否则你会;
如果未丢失(债务人公司),以及
债务公司<19.59004211704,则执行;
_节点=26;
_叶=2;
P_BAD1=1;
P_BAD0=0;
Q_BAD1=1;
Q_BAD0=0;
I_BAD='1';
U_BAD=1;
结束;
否则你会;
_节点=27;
_叶=3;
P_BAD1=0.18145161290322;
P_BAD0=0.81854838709677;
Q_BAD1=0.18145161290322;
Q_BAD0=0.81854838709677;
I_BAD='0';
U_BAD=0;
结束;
结束;
结束;
否则你会;
_ARBFMT_12=PUT(DEROG,BEST12.);
%DMNORMIP(_ARBFMT_12);
如果_ARBFMT_12 IN('3','2','4','6'),则执行;
如果未丢失(CLNO),以及

34.5文件中明确解释了长度报表中美元的含义。另一个是宏调用,您需要在程序中找到宏定义以了解它的功能。对于EM问题,如果您拥有有效的SAS许可证,最好联系SAS支持。您还可以提取优化的代码,看看它是否有任何不同,是否更易于使用。它看起来应该在代码的顶部定义?输出中是否不再包含代码?从一个网页上我发现了以下内容,但不能保证它就是你的。我想这和那个链接里的东西很相似,谢谢!