在 SPSS 宏中循环遍历并行列表/数组

2023-12-19

我想编写一个SPSS宏来执行三个操作:

  1. 生成自定义表,
  2. 清洁输出窗口,
  3. 导出表。

如您所知,SPSS 宏工具允许使用两种类型的循环:“数字”,如 (!do !i = !x !to !y) 和 'list'/'for every' 像 (!do !i !in (!1))。我的目标是创建一个带有如下调用的宏:col v1 v2 / "Sheet A" "Sheet B".以这种方式工作(使用“列表”之类的循环):

  1. 获取第一个变量名称 (v1)
  2. 将其放入ctables宏观剖面
  3. 获取第一个工作表名称(字符串“Sheet A”)
  4. 将其放入output export宏观剖面
  5. 获取第二个变量名
  6. ...
  7. 获取第二个工作表名称
  8. ...

等等。

一开始我是这么写的:

define col (!positional !charend('/')
/!positional !cmdend)

!do !i !in (!1)

output close all.

  ctables
  /table x1 + x2
  by !i [mean f1.2, totals[mean f1.2]].

  output modify
  /select logs headings texts warnings pagetitles outlineheaders notes
  /deleteobject delete = yes.

!doend

!do !i !in (!2)

   output export
    /contents export = visible
    /xlsx documentfile = "E:\path\file.xlsx"
      operation = createsheet
      sheet = !i.

!doend

!enddefine.

*** MACRO CALL.
col v1 v2 / "Sheet A" "Sheet B".

输出总体上是不正确的,因为我只得到了带有第二个变量的表。但是,在文件中我发现了两张名称正确的工作表。所以,我尝试嵌套:

define col (!positional !charend('/')
/!positional !cmdend)

!do !i !in (!1)
!do !j !in (!2)

output close all.

  ctables
  /table x1 + x2
  by !i [mean f1.2, totals[mean f1.2]].

  output modify
  /select logs headings texts warnings pagetitles outlineheaders notes
  /deleteobject delete = yes.

   output export
    /contents export = visible
    /xlsx documentfile = "E:\path\file.xlsx"
      operation = createsheet
      sheet = !j.

!doend
!doend

!enddefine.

*** MACRO CALL.
col v1 v2 / "Sheet A" "Sheet B".

输出完全相同,这意味着 SPSS 将“/”左侧列表中的每个元素与“/”右侧列表中的每个元素交叉,并覆盖 Excel 文件中以前的结果。我的目标是接收这样的宏扩展:

* FIRST EXPANSION:
...
  ctables
  /table x1 + x2
  by v1 [mean f1.2, totals[mean f1.2]].
...
   output export
    /contents export = visible
    /xlsx documentfile = "E:\path\file.xlsx"
      operation = createsheet
      sheet = "Sheet A".

* SECOND (LAST) EXPANSION:
...
  ctables
  /table x1 + x2
  by v2 [mean f1.2, totals[mean f1.2]].
...
   output export
    /contents export = visible
    /xlsx documentfile = "E:\path\file.xlsx"
      operation = createsheet
      sheet = "Sheet B".

换句话说 - 2 列出 x 2 个元素,但只有两个循环 - 而不是四个。有谁知道如何得到这样的结果?


据我所知,没有正式/直接的方法可以在 SPSS 宏中的并行列表上运行循环,因此您的选择是 - 要么使用 Python,要么找到解决方法 - 这里有一些想法:

1. 使用数字循环重新创建两个列表
所以你循环数字 1 到 5,并使用它们来创建变量名称 - v1 到 v5 以及“工作表 1”到“工作表 5”:

!do !i=1 !to 5
.....
  by !concat("v",!i) [mean f1.2, totals[mean f1.2]].
.....
  sheet = !quote(!concat("sheet ",!i))
.....
!doend

如果它们不是常量,您还可以将开始和/或结束数字添加到宏调用中。
当然,只有当您的两个列表共享相同的编号(如上例所示)时,这才有效。如果没有,您可以使用以下方法之一:

2. 循环遍历一个列表,同时“吃掉”第二个列表
SPSS 宏循环一次仅迭代一个列表 - 但您可以在第一个列表的每次迭代中获取一个项目并将其从第二个列表中删除,而不是迭代第二个列表:

define col (!pos !charend('/') / !pos !cmdend)
!let !arr2=!2
!do !i !in(!1)
    .....
    by !i [mean f1.2, totals[mean f1.2]].
    .....
!let !sheet=!head(!arr2)
!let !arr2=!tail(!arr2)
    .....
    sheet = !sheet
    .....
!doend
!enddefine.

*and the macro call:
col VARa VARb VARc/"sheet 1" "sheet 2" "sheet 3".

3. 在单对上定义宏,使用多个宏调用这是最简单的方法,如果每个列表中只有几个项目 - 您可以使用单个变量名称和单个工作表名称定义宏,您将能够通过运行获得相同的结果 -

col VARa/ "sheet 1" .
col VARb/ "sheet 2" .

代替col VARa VARb/ "sheet 1" "sheet 2" .正如你之前尝试过的那样。

如果这些列表很长,您可以单独自动运行宏调用(使用write例如命令 - 但这是一个单独的问题)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 SPSS 宏中循环遍历并行列表/数组 的相关文章

  • OSX:从命令行检查屏幕是睡眠还是唤醒

    有什么方法可以通过命令行或 applescript 检查屏幕是否处于睡眠状态或唤醒状态 与此相关 检查 Applescript 中显示器是否处于休眠状态 https stackoverflow com questions 32319778
  • 如何向现有 (OS X) 可执行文件添加节?

    有什么方法可以将部分添加到已链接的可执行文件中吗 我正在尝试基于以下代码对 OS X 可执行文件进行代码签名苹果说明 http developer apple com library mac documentation Security C
  • Cython 在 Mac OS X 10.8 上编译/链接失败

    我是 python 的新手 尝试使用 Cython 来使用一个简单的例子http blog perrygeo net 2008 04 19 a quick cython introduction http blog perrygeo net
  • 检查 u 键是否被按下 Swift Cocoa [重复]

    这个问题在这里已经有答案了 我正在尝试检测是否U键是否被按下 如果是的话应该print BUT BUT 但我不确定如何检查不同的按键 因为按键的文档非常糟糕 我找到了带有键码的答案 但它们仅适用于 QWERTY 键盘 视图控制器 swift
  • 连接到 Mac Mini 时设备经常失去连接

    我正在尝试在 MAC Mini 上开发 android 应用程序 并安装了所有必需的软件 如 android SDK eclipse 和 ADT 到目前为止 除了一件事之外 一切都运行良好 我正在通过 USB 连接 Google Nexus
  • 为什么我无法在 OS X 上更改 tkMessagebox.askyesno() 上的图标?

    tkMessageBox askyesno Title Message icon tkMessageBox WARNING 在 OS X 上只给我火箭图标 我知道 OS X 和 tkMessageBox 图标有些奇怪 因为tkMessage
  • 如何在最新的 OS X 上安装多个版本的 Python 并并行使用它们?

    我想在 OS X 10 11 上使用多个 Python 版本运行测试 包括 Python 2 6 Python 2 7 默认 已解决 Python 3 4 Python 3 5 通过brew 安装 运行良好 Conda Python 3 5
  • AppleScript:如何获取文件夹中没有隐藏文件的文件?

    我其实有两个问题 当我尝试获取文件夹中的文件时 如何排除 DS STORE Icon 等隐藏文件 我试过了 没有隐形人 但似乎不起作用 如果已经存在 如何将我的 var the new folder 设置为现有文件夹 感谢您的回答 My c
  • 如何在 mac os 10.6 上安装brew或homebrew

    我已经尝试过多次了 谁能告诉我具体的详细步骤吗 我的Mac操作系统是10 6 8 它抱怨一些丢失的包裹 使用它在 Mac OSX 10 6 8 上安装 ruby e curl fsSL https raw githubusercontent
  • Xcode:无法检查应用程序包

    我正在运行 Xcode 6 和 iOS 8 GM 每当我运行我的应用程序时 我都会从 Xcode 收到此消息 无法检查应用程序包 这样我就可以运行和构建 我会收到消息 我再次运行并构建 一切都按预期运行 这是我的设备 然后它会冲洗并重复 每
  • CGContextDrawImage 绘制非常模糊的大图像

    我正在尝试制作一个可以使用 CGContextDrawImage 绘制大图像 例如 2048 x 1537 图像的一部分的对象 它工作得很好 只是它非常模糊 我正在使用一个 drawingController 它覆盖了drawLayer i
  • 在 Mac 上运行 Tkinter

    我是一个绝对的新手 我正在尝试为我的学校项目制作 Python GUI 所以我决定使用 Tkinter 当我尝试导入 Tkinter 时 它会抛出以下消息 gt gt gt import tkinter Traceback most rec
  • Java 在 OS X 报告上拖放移动而不是复制

    更新状态 Bug 已报告给 Oracle 目前仍处于开放 未解决状态 https bugs openjdk java net browse JDK 8054325 https bugs openjdk java net browse JDK
  • 是否可以在 Mac OS X 上构建 FreeGLUT?

    我正在做一些关于 OpenGL 的教程 http www arcsynthesis org gltut Basics Tutorial 2001 html那个使用FreeGLUT http freeglut sourceforge net
  • 用给定均值截断正态分布

    python 是否可以生成具有给定期望值的截断正态分布 我知道 scipy stats truncnorm 可以给出截断的正态分布 该分布取平均值original正态分布作为参数 但我想创建一个截断正态分布 使得截断分布的期望值是一个特定值
  • SwiftUI:获取动态背景颜色(深色模式或浅色模式)

    有没有一种方法可以系统地访问 SwiftUI 视图的标准动态背景颜色 无论用户处于浅色模式还是深色模式 例如 我知道以下内容可用于获取主要 例如文本 颜色 let textColor Color primary 但我没有看到任何类似的背景颜
  • Apache PHP/OSX Mavericks: - 无法打开流:打开的文件太多

    我最近升级到 OSX Mavericks 从那时起 我开始在我的开发计算机上收到上述错误 代码中没有明显的问题 它是自动生成的Yii http www yiiframework com 示例应用程序 Mavericks 升级过程中发生的事情
  • window.speechSynthesis.getVoices() 在 macOS safari 15.4 上返回空数组

    功能window speechSynthesis getVoices 在我的浏览器 macOS 12 3 1 Safari 15 4 上返回一个空数组 在以前的版本 Safari 15 3 macOs 12 2 上 该函数按照预期返回一个包
  • 在 OS X 上创建和使用静态库

    好的 我正在尝试创建一个 Cocoa 库 静态 并使用 但我不断收到错误 我创建了一个超基本的静态库 TSXLib 其中仅包含一个额外的类 import
  • 在 Mac 操作系统上使用 ffmpeg 录制视频

    我想在 mac OS 上使用 ffmpeg 以任何格式录制实时网络摄像头视频 我尝试了很多 但无法找到用于重新编码视频的命令 所以请任何人都可以告诉我 ffmpeg 命令用于使用 Mac 操作系统的网络摄像头捕获视频 提前致谢 对于 Mac

随机推荐

  • iOS:如何在调试时观察 NSManagedObject 属性

    正如标题所说 我想调试一些 Core Data 的 bug 而不是使用NSLog在代码中的任何地方 是否可以在 XCode 4 的监视窗口中监视实体的属性 就像 NET的Entity Framework 4 0中的 快速监视 工具一样 任何
  • 为什么简单地使用 State monad 会导致堆栈溢出?

    我正在研究 State monad 我不知道是什么导致了这段简单代码中的堆栈溢出 import Control Monad State Lazy tick State Int Int tick do n lt get put n 1 ret
  • Google iOS 设备策略与使用 Google SSO 的 iOS 应用程序配合不佳

    我们构建了一个使用 Google 登录的 React Native 应用程序 我们用react native google signin并发布 ios 和 android 应用程序 在 Android 应用程序中登录 100 有效 它也适用
  • 在 JavaScript 中创建 DIV 图像 (GIF/PNG)

    我想知道是否有一个 JavaScript 库可以让我从 DIV 的内容生成图像 基本上 这是某些服务器端打印代码所必需的 它需要从浏览器打印背景 我最终想做的是将 DIV 内容编码为 PNG 格式 并通过打印操作发布编码数据 如果这可能的话
  • 如何调用从 C++ 导入的包中定义的 julia 方法?

    我需要一个 C 库来计算复杂参数的多伽玛函数 经过一番谷歌搜索后我发现了这一点 https scicomp stackexchange com questions 23194 i am searching for c code of the
  • 如何更改 PrimeFaces 中面板网格的列宽

    我正在使用 Java EE 和 PrimeFaces 如何更改 PrimeFaces 中面板网格的列宽 有例子吗 您可以使用columnClasses 限定panelGrid 内的列 以下代码设置不同的宽度并将单元格内容与顶部对齐
  • 使用jquery自动完成标签时的utf-8问题

    嘿伙计们 最近我使用jquery自动完成标签 http devthought com projects jquery textboxlist http devthought com projects jquery textboxlist 一
  • 检查字符串中的(仅整个)单词

    Checkio 上的培训 该任务称为流行词 任务是从给定字符串的 字符串 列表中搜索单词 例如 textt When I was One I had just begun When I was Two I was nearly new ww
  • 如何摆脱 PHP 注意:第 123 行 X 中的未定义索引:HTTPS

    我刚刚发现我有数千个此类错误 来自两个相同的文件 我通过使用删除了很多错误isset 但我不知道如何消除最后两个错误 也许你们可以帮助我 PHP Notice Undefined index HTTPS on xxx xxx xxx php
  • 如何验证脚本中的视频文件?

    我有一个包含大量视频文件的服务器 恢复后 我注意到几个文件的校验和发生了变化 由于我没有所有文件的校验和 因此我想编写一个脚本来验证文件完整性 对于档案来说很简单 tar t unzip t rar t等 或图像 convert image
  • 如何从 MSBuild 指定规则集

    升级到 VS 2010 MSBUILD p RunCodeAnalysis true 后无法按预期工作 msbuild solution sln p RunCodeAnalysis true 为了获得更快的构建 我们删除了 DEBUG 构建
  • 对 API 进行速率限制 (spring MVC)

    我正在寻找最有效的方法来实现 或使用已经设置的 速率限制器 以保护我所有的其余 api url 我正在寻找的保护是 每用户每秒调用限制器 我上网查了一下 结果是使用 Redis 或 Guava RateLimiter 说实话我没用过Redi
  • 请解释一下Android中的Context类

    我是安卓新手 有人可以向我解释一下 Context 类 对象的概念吗 这是什么 它将用来做什么 为什么是 Context 类 你见过吗安卓开发者指南 http developer android com reference android
  • 多个点能否组成一个圆? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 如果我有例如20个点 我如何检查这些
  • 通过代码在换行单元格中插入换行符

    Is it possible to insert line break in a wrapped cell through VBA code similar to doing Alt Enter when entering data man
  • 当 React 已经渲染时无法刷新更新

    我试图在 API 返回错误时显示警报 对于警报窗口 我使用 sweetalert2 在我的渲染方法中 我正在检查错误消息是否包含内容 如果它包含错误消息 我想向用户显示警报 当我提交表单时 我会进行 API 调用 如果返回错误 reduce
  • 在 Linq 中返回单个列表属性 List

    我在这里遇到问题 我有一个列表 this Ddown 有 3 个属性 我想编写一个 Linq 查询来返回其中一个属性 假设我有属性 a b c 我想返回列表 c 我如何在 linq 中做到这一点 var listOfC this Ddown
  • 如何向直方图添加颜色条?

    I have a histogram like this just like a normal histogram 在我的情况下 总是有 20 个条形 x 轴从 0 到 1 并且条形的颜色是根据 x 轴上的值定义的 我想要的是添加一个色谱
  • TeamCity GitHub 私钥访问被拒绝

    有谁知道使用 TeamCity 与 github 和 ssh 私钥的教程 我尝试设置 git hub 进行连接 但要么出现身份验证错误 要么访问被拒绝 我在 Windows 2003 上运行 TeamCity 我将构建代理作为自定义帐户运行
  • 在 SPSS 宏中循环遍历并行列表/数组

    我想编写一个SPSS宏来执行三个操作 生成自定义表 清洁输出窗口 导出表 如您所知 SPSS 宏工具允许使用两种类型的循环 数字 如 do i x to y 和 list for every 像 do i in 1 我的目标是创建一个带有如