【问题标题】:SPSS Macro to Automate Sequential Variable References用于自动化顺序变量引用的 SPSS 宏
【发布时间】:2012-02-16 20:52:22
【问题描述】:

我很难在 SPSS 中获得一个不基于变量的简单循环。

简而言之,我想写

!sequentialVars varStr=/Var/ i=/20/.

或类似的并得到: Var1 Var2 Var3 Var4 Var5 ... Var19 Var20 放入 cTable 或其他任何需要一串变量名的地方。

在伪 VB 中是这样的:

varString = "AnyVarName"
for i=1 to 20
  newVarList = concatenate(newVarList," ",varString, i)
next i

我什至无法在 SPSS 循环中回显 i,更不用说连接它了。

谢谢!

【问题讨论】:

  • This document 在 PDF 的第 130 页上有一个功能等效的示例,即创建串联存根和横幅表。
  • 这将有助于连接,但除非我完全想念它,否则我似乎一开始就找不到如何生成顺序变量。不是“+”部分,而是V1 V2 V3的数字。然后它也是 Va Vb Vc 的字母。这有意义吗?
  • 好吧,这是有道理的,如果后缀是一个不会太难的数字(字母我不太确定)。我会看看我能否快速举出一个例子。大多数不需要+之间的项目都不需要,因为可以经常使用VAR1 to VAR50等。

标签: loops macros spss


【解决方案1】:

下面的示例演示了如何在宏中创建变量列表。它的作用是从 1 循环到 n,并连接当前变量末尾的数字 (base_i)。然后 X1 + X2 .... 只需通过循环添加每个变量即可。该宏接受参数基变量和项目数。

*making filler data frame.
data list free / V1 (F1.0).
begin data
1
3
5
end data.
dataset name input.

*making a vector list.
vector X(5,F1.0).
do repeat X = X1 to X5.
compute X = RV.BERNOULLI(0.5).
end repeat.

*what I want to do essentially.
ctables
/table X1 + X2.

*now to demonstrate looping through list.
DEFINE !loop_ctable (base = !TOKENS(1)
                     /n = !TOKENS(1))

!DO !I = 1 !TO !n
    !IF (!I = 1) !then
        !LET !base_stub = !concat(!base,"1")
    !ELSE
        !LET !base_i = !CONCAT(!base,!I)
        !LET !base_stub = !concat(!base_stub," + ",!base_i)
    !IFEND
!DOEND

ctables
/table !base_stub.

!ENDDEFINE.

set mprint on.

!loop_ctable base = X n = 5.

我可以想出一种方法来循环遍历字母(至少遍历字母表的首字母),尽管希望这样就足够了。

【讨论】:

  • 是否可以在宏之外使用 ctables 命令,这样我就可以在不同的情况下使用相同的命令? CTABLE /TABLE !loop_ctable 基数 = X n = 5。
  • 不,不是@ARobertson。也许如果你能多澄清一下你的目标,我会更有帮助。
猜你喜欢
  • 2021-08-31
  • 1970-01-01
  • 1970-01-01
  • 2015-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多