示例 3: 生成随机数据
您可以使用命令语法来生成具有近似正态分布的变量。 下图中显示了用于为 1000 个观测值生成 5 个标准正态变量 (X1 到 X5) 的命令。 如以下输出所示,每个变量的平均值约为 0 ,标准差约为 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.
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 宏发出上面显示的数据生成命令。
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 宏以使其接受关键字参数,那么可以定制正态分布变量的生成,如下图所示。 宏允许您指定要生成的变量和个案数以及近似标准差。
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 PROGRAM和END INPUT PROGRAM之间的命令使用宏自变量的值生成新数据。- 命令
!LET和!DO/!DOEND构造在DESCRIPTIVES中使用的变量列表 (!LIST)。 第一个!LET命令将列表初始化为空 (空白) 字符串值。 对于每个新变量,索引循环会将格式为 X1, X2, X3等的字符串添加到列表中。 因此,DESCRIPTIVES请求每个新变量的平均值和标准差。 - 第一个宏调用生成具有两个标准正态变量的 500 个个案。 第二次调用请求缺省变量数,个案数和标准差。 还会针对每个变量计算描述性统计 (未显示)。
如下图所示,您可以声明其他关键字自变量,这些自变量允许您指定所生成数据的分布 (正态或均匀) 以及用作标准差 (对于正态分布数据) 或范围 (对于均匀分布数据) 的参数值。
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语句声明自变量OBS,VARS,DIST和PARAM。OBS和VARS表示要生成的观测值和观测值的数量。 自变量DIST和PARAM指定所生成数据的分布的形状和参数。 缺省情况下,宏使用 5 标准正态变量生成 1000 个观测值。INPUT PROGRAM和END INPUT PROGRAM之间的语句使用宏自变量的值生成新数据。- 宏主体中的其余命令获取所生成变量的描述性统计信息。
- 宏调用将创建两个具有 2 范围的近似均匀分布的变量。 下面显示了宏调用的输出。
Valid
Variable Mean Std Dev Minimum Maximum N Label
X1 .99 .57 .00 2.00 500
X2 1.00 .57 .00 2.00 500