示例 3: 生成随机数据

您可以使用命令语法来生成具有近似正态分布的变量。 下图中显示了用于为 1000 个观测值生成 5 个标准正态变量 (X1X5) 的命令。 如以下输出所示,每个变量的平均值约为 0 ,标准差约为 1。

图 1。 数据生成命令
INPUT PROGRAM.
-   VECTOR X(5).
-       LOOP #I = 1 TO 1000.
-           LOOP #J = 1 TO 5.
-             COMPUTE X(#J) = NORMAL(1).
-           END LOOP.
-           END CASE.
-       END LOOP.
-       END FILE.
END INPUT PROGRAM.

DESCRIPTIVES VARIABLES X1 TO X5.
图 2。 生成的数据的描述性统计信息
                                           Valid
Variable  Mean  Std Dev  Minimum  Maximum      N  Label
X1        -.01     1.02    -3.11     4.15   1000
X2         .08     1.03    -3.19     3.22   1000
X3         .02     1.00    -3.01     3.51   1000
X4         .03     1.00    -3.35     3.19   1000
X5        -.01      .96    -3.34     2.91   1000

下面的 !DATAGEN 宏发出上面显示的数据生成命令。

图 3.!DATAGEN 宏
DEFINE !DATAGEN ().

INPUT PROGRAM.
-    VECTOR X(5).
-        LOOP #I = 1 TO 1000.
-            LOOP #J = 1 TO 5.
-                COMPUTE X(#J) = NORMAL(1).
-            END LOOP.
-            END CASE.
-        END LOOP.
-        END FILE.
END INPUT PROGRAM.

DESCRIPTIVES VARIABLES X1 TO X5.

!ENDDEFINE.

!DATAGEN.

数据生成命令嵌入在宏定义命令之间。 宏生成与上面所示相同的数据和描述性统计。

如果修改 !DATAGEN 宏以使其接受关键字参数,那么可以定制正态分布变量的生成,如下图所示。 宏允许您指定要生成的变量和个案数以及近似标准差。

图 4.!带有关键字自变量的 DATAGEN 宏
DEFINE !DATAGEN ( OBS =!TOKENS(1) !DEFAULT(1000)
                  /VARS =!TOKENS(1) !DEFAULT(5)
                  /SD =!CMDEND !DEFAULT(1)).
INPUT PROGRAM.
-   VECTOR X(!VARS).
-       LOOP #I = 1 TO !OBS.
-           LOOP #J = 1 TO !VARS.
-               COMPUTE X(#J) = NORMAL(!SD).
-           END LOOP.
-           END CASE.
-       END LOOP.
-       END FILE.
END INPUT PROGRAM.

!LET !LIST = !NULL.
!DO  !I = 1 !TO !VARS.
-   !LET !LIST = !CONCAT(!LIST, ‘ ‘, X, !I).
!DOEND.

DESCRIPTIVES VARIABLES !LIST.

!ENDDEFINE.

!DATAGEN OBS=500 VARS=2 SD=1.
!DATAGEN.
  • DEFINE 语句声明用于指定个案数 (OBS) ,变量 (VARS) 和标准差 (SD) 的自变量。 缺省情况下,宏使用标准差为 1 的 5 变量创建 1000 个观测值。
  • INPUT PROGRAMEND INPUT PROGRAM 之间的命令使用宏自变量的值生成新数据。
  • 命令 !LET!DO/!DOEND 构造在 DESCRIPTIVES中使用的变量列表 (!LIST)。 第一个 !LET 命令将列表初始化为空 (空白) 字符串值。 对于每个新变量,索引循环会将格式为 X1X2, X3等的字符串添加到列表中。 因此, DESCRIPTIVES 请求每个新变量的平均值和标准差。
  • 第一个宏调用生成具有两个标准正态变量的 500 个个案。 第二次调用请求缺省变量数,个案数和标准差。 还会针对每个变量计算描述性统计 (未显示)。

如下图所示,您可以声明其他关键字自变量,这些自变量允许您指定所生成数据的分布 (正态或均匀) 以及用作标准差 (对于正态分布数据) 或范围 (对于均匀分布数据) 的参数值。

图 5.!带有其他关键字自变量的 DATAGEN 宏
DEFINE !DATAGEN (OBS    =!TOKENS(1) !DEFAULT(1000)
                 /VARS  =!TOKENS(1) !DEFAULT(5)
                 /DIST  =!TOKENS(1) !DEFAULT(NORMAL)
                 /PARAM =!TOKENS(1) !DEFAULT(1)).
INPUT PROGRAM.
-   VECTOR X(!VARS).
-       LOOP #I = 1 TO !OBS.
-           LOOP #J = 1 TO !VARS.
-               COMPUTE X(#J) = !DIST(!PARAM).
-           END LOOP.
-           END CASE.
-       END LOOP.
-       END FILE.
END INPUT PROGRAM.

!LET !LIST = !NULL.
!DO  !I = 1 !TO !VARS.
-   !LET !LIST = !CONCAT(!LIST, ’ ’, X, !I).
!DOEND.

DESCRIPTIVES VARIABLES !LIST.
!ENDDEFINE.

!DATAGEN OBS=500 VARS=2 DIST=UNIFORM PARAM=2.
  • DEFINE 语句声明自变量 OBSVARSDISTPARAMOBSVARS 表示要生成的观测值和观测值的数量。 自变量 DISTPARAM 指定所生成数据的分布的形状和参数。 缺省情况下,宏使用 5 标准正态变量生成 1000 个观测值。
  • INPUT PROGRAMEND INPUT PROGRAM 之间的语句使用宏自变量的值生成新数据。
  • 宏主体中的其余命令获取所生成变量的描述性统计信息。
  • 宏调用将创建两个具有 2 范围的近似均匀分布的变量。 下面显示了宏调用的输出。
图 6。 均匀变量的描述统计
                                           Valid
Variable  Mean  Std Dev  Minimum  Maximum      N  Label
X1         .99      .57      .00     2.00    500
X2        1.00      .57      .00     2.00    500