【问题标题】:Extract a list of variables satisfying certain conditions and storing it in a new variable using SPSS Syntax使用 SPSS Syntax 提取满足特定条件的变量列表并将其存储在新变量中
【发布时间】:2019-01-15 11:13:58
【问题描述】:

我有大约 300 个变量,我正在计算它们的偏度和峰度。现在,我想创建一个新变量,其中包含偏度和峰度在一定范围内的所有变量的列表。这个想法是只选择那些满足条件的变量并对所有其他变量执行归一化。

计算我正在使用的偏度;

Descriptives A TO Z
/Statistics Skewness.
Execute.

我知道这不是一个有效的语法,但我需要这样的东西:

Compute x= if(Skewness(A TO Z)>1)

请为此提供 SPSS 语法。

【问题讨论】:

  • 您确定在新变量中需要此列表吗?一旦它在那里,你会怎么做?我认为您正在寻找的代码应该列出需要规范化的变量然后执行。或者检查变量并为每个变量决定是否需要标准化并(如果是)进行。
  • 是的,完全正确。代码应该能够找到哪些变量需要规范化并在这些变量上执行。

标签: spss


【解决方案1】:

有多种方法可以解决此问题,因此可能有更简单的方法。

您只需将“var1 TO varN”更改为您的变量列表以及创建标志的两条 COMPUTE 行上的偏斜度和峰度所需的任何标准,这将为您完成。

如果我这样做,我会更进一步,使用 WRITE OUT = ".sps" /CMD 将规范化构建到语法中。 INSERT FILE = ".sps",但这不是你要求的。

DATASET DECLARE DistributionSyntax.
OMS
  /SELECT TABLES
  /IF SUBTYPES=["Descriptives"] INSTANCES=[1]
  /DESTINATION FORMAT=SAV OUTFILE = 'DistributionSyntax'.
EXAMINE VARIABLES=var1 TO varN
  /PLOT NONE
  /STATISTICS DESCRIPTIVES
  /CINTERVAL 95
  /MISSING PAIRWISE
  /NOTOTAL.
OMSEND.
DATASET ACTIVATE DistributionSyntax.

USE ALL.
FILTER OFF.
SELECT IF ANY(Var2,'Skewness','Kurtosis').
EXECUTE.
STRING VarName (A64).
COMPUTE SkewnessFlag = (Var2 = 'Skewness' AND ABS(Statistic) > 2).
COMPUTE KurtosisFlag = (Var2 = 'Kurtosis' AND ABS(Statistic) > 2).
COMPUTE VarName = CHAR.SUBSTR(Var1,1,CHAR.INDEX(Var1,' ')-1).
EXECUTE.

USE ALL.
COMPUTE filter_$=(SkewnessFlag = 1).
VALUE LABELS filter_$ 0 'Not Selected' 1 'Selected'.
FORMATS filter_$ (f1.0).
FILTER BY filter_$.
EXECUTE.
FRE VarName.

USE ALL.
COMPUTE filter_$=(KurtosisFlag= 1).
VALUE LABELS filter_$ 0 'Not Selected' 1 'Selected'.
FORMATS filter_$ (f1.0).
FILTER BY filter_$.
EXECUTE.
FRE VarName.

USE ALL. 
FILTER OFF. 
EXECUTE.

如果您在计算标志后省略选择数据块并用它替换它,它将计算符合您标准的变量的标准化版本。这会计算新变量,您需要为语法文件添加文件位置(替换 WRITE 和 INSERT 命令中的“~/”),并将引用为“RAWDATA”的数据集的名称更改为您的数据集名称是:

USE ALL.
FILTER OFF.
SELECT IF ANY(1,SkewnessFlag,KurtosisFlag).
EXECUTE.

STRING CMD (A250).
COMPUTE CMD = CONCAT("COMPUTE ",RTRIM(VarName),".Norm = ln(",RTRIM(VarName),").").
EXECUTE.

DATA LIST /CMD 1-250 (A).
BEGIN DATA
EXECUTE.
END DATA.
DATASET NAME EXE WINDOW = FRONT.

DATASET ACTIVATE DistributionSyntax.
ADD FILES /FILE = *
/FILE = 'EXE'.
EXECUTE.
DATASET CLOSE EXE.
DATASET ACTIVATE DistributionSyntax.

WRITE OUT="~\Normalize Variables.sps" /CMD. 
DATASET CLOSE DistributionSyntax.
DATASET ACTIVATE RAWDATA.
INSERT FILE="~\Normalize Variables.sps".

【讨论】:

  • 非常感谢您提供此代码。这真的很有帮助。我也在尝试按照您的建议添加规范化语法:)
  • 没问题。我继续添加了一个计算标准化变量的块。如果您想根据偏度或峰度应用不同的过程,那么您将使用“DO IF”块来检查它在 COMPUTE CMD 命令周围标记的标准。
  • 嗨,需要澄清一下。我的基础数据文件有大约 300 个变量,并且是列格式。 DistributionSyntax 文件中每个变量都提到了 2 次,一次是偏度,一次是行峰度(一个在另一个之下)。变量是统计,标准。错误、偏度、峰度等)。作为规范化后的最终输出,我希望数据以基本数据格式出现(列中的每个变量,如果它已被规范化,则原始数据被规范化数据替换)。为此,我们应该使用 OMS 命令还是有一些更简单的方法。
  • 所以你想要一个只有需要转换的变量名称的数据集?这些变量将包含哪些值?
  • 是的,数据集必须具有 DistributionSyntax 文件中的变量名称,并从基础数据集中导入案例。整个目标是根据某些条件选择基础数据集中的变量,并对数据进行规范化以供进一步处理。此外,如果有帮助,所有变量都按列排列并且是时间序列。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-11-27
  • 1970-01-01
  • 1970-01-01
  • 2012-08-25
  • 1970-01-01
  • 1970-01-01
  • 2021-11-21
相关资源
最近更新 更多