如何手动生成虚拟变量?

How can I generate dummy variables manually?

这是频率程序:

freq procedure

为什么 TRD_EVENT_ROUFOR_1 和 TRD_EVENT_ROUFOR_2 列全部为零? 为什么它没有显示其他假人(例如 TRD_EVENT_ROUFOR_8)? 问题是什么?我的代码的哪一部分是错误的?

这是我的代码?

 DATA Sampledata87_02_Mer_DumVar;
  SET Sampledata87_02_Mer ;

    IF TRD_EVENT_ROUFOR = '9:00' THEN TRD_EVENT_ROUFOR_1 = 1; 
    ELSE TRD_EVENT_ROUFOR_1 = 0;
    IF TRD_EVENT_ROUFOR = '9:30' THEN TRD_EVENT_ROUFOR_2 = 1; 
    ELSE TRD_EVENT_ROUFOR_2 = 0;
    IF TRD_EVENT_ROUFOR = '10:00' THEN TRD_EVENT_ROUFOR_3 = 1; 
    ELSE TRD_EVENT_ROUFOR_3 = 0;
    IF TRD_EVENT_ROUFOR = '10:30' THEN TRD_EVENT_ROUFOR_4 = 1; 
    ELSE TRD_EVENT_ROUFOR_4 = 0;
    IF TRD_EVENT_ROUFOR = '11:00' THEN TRD_EVENT_ROUFOR_5 = 1; 
    ELSE TRD_EVENT_ROUFOR_5 = 0;
    IF TRD_EVENT_ROUFOR = '11:30' THEN TRD_EVENT_ROUFOR_6 = 1; 
    ELSE TRD_EVENT_ROUFOR_6 = 0;
    IF TRD_EVENT_ROUFOR = '12:00' THEN TRD_EVENT_ROUFOR_7 = 1; 
    ELSE TRD_EVENT_ROUFOR_7 = 0;
    IF TRD_EVENT_ROUFOR = '12:30' THEN TRD_EVENT_ROUFOR_8 = 1; 
    ELSE TRD_EVENT_ROUFOR_8 = 0;
    IF TRD_EVENT_ROUFOR = '13:00' THEN TRD_EVENT_ROUFOR_9 = 1; 
    ELSE TRD_EVENT_ROUFOR_9 = 0;
RUN;

PROC FREQ DATA=Sampledata87_02_Mer_DumVar;
  TABLES TRD_EVENT_ROUFOR*TRD_EVENT_ROUFOR_1*TRD_EVENT_ROUFOR_2*TRD_EVENT_ROUFOR_3*TRD_EVENT_ROUFOR_4*TRD_EVENT_ROUFOR_5 / list ;
RUN;

而且,这里是 CONTENTS 过程:

CONTENTS Procedure

对于前两个变量“9:00”和“9:30”,我猜它们在字符变量 $5 中是右对齐的。实际上是“9:00”和“9:30”。

通常您不需要在 SAS 中创建虚拟对象,您可以使用 CLASS 语句代替。如果您确实想创建它们,有两个有用的过程 PROC GLMMOD 和 PROC TRANSREG。

包含示例数据通常会有帮助。