SAS中%DMNORMIP和$的定义是什么?
我是一名R用户,我正在尝试在R中测试下面的SAS代码。我认为代码非常简单,除了以下两个困扰我的主题: 1.%DMNORMIP是什么意思?SAS中%DMNORMIP和$的定义是什么?,sas,decision-tree,Sas,Decision Tree,我是一名R用户,我正在尝试在R中测试下面的SAS代码。我认为代码非常简单,除了以下两个困扰我的主题: 1.%DMNORMIP是什么意思? 2.美元做什么 ****************************************************************; ****** DECISION TREE SCORING CODE ******; *****************************************
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支持。您还可以提取优化的代码,看看它是否有任何不同,是否更易于使用。它看起来应该在代码的顶部定义?输出中是否不再包含代码?从一个网页上我发现了以下内容,但不能保证它就是你的。我想这和那个链接里的东西很相似,谢谢!