用于在输出文件大纲中命名单个分析的SPSS语法

时间:2015-06-02 00:16:11

标签: syntax output naming spss

我在SPSS中创建了语法,它为我提供了90个一般线性模型的独立迭代,每个迭代都有不同的固定因子和协变量。在输出文件中,它们都被命名为"一般线性模型。"然后我必须手动重命名输出中的每个分析,我想找到一个语法,为每个结果添加一个更具体的名称,这将有助于我从其他89个结果中识别它(例如"一般线性模型 - 仅限男性:按性别平均值w / Weight covariate")。

这是语法分析的一个例子:

USE ALL.
COMPUTE filter_$=(Muscle = "BICEPS" & Subj = "S1" & SMU = 1 ).
VARIABLE LABELS filter_$ 'Muscle = "BICEPS" & Subj = "S1" & SMU = 1 (FILTER)'.
VALUE LABELS filter_$ 0 'Not Selected' 1 'Selected'.
FORMATS filter_$ (f1.0). FILTER BY filter_$.
EXECUTE. 

GLM Frequency_Wk6 Frequency_Wk9
    Frequency_Wk12 Frequency_Wk16 
    Frequency_Wk20
/WSFACTOR=Time 5 Polynomial
/METHOD=SSTYPE(3)
/PLOT=PROFILE(Time)
/EMMEANS=TABLES(Time)
/CRITERIA=ALPHA(.05)
/WSDESIGN=Time. 

我正在寻找要添加到此的语法,将此分析命名为:" S1,SMU1 BICEPS,GLM"不要命名整个输出文件,而是输出中的每个分析,所以我不必逐个进行。我有时会在单个输出文件中进行200多次迭代,并且在输出文件中单独重命名它们需要花费太多时间。

3 个答案:

答案 0 :(得分:0)

假设您将模型导出到 Excel (请另外说明)。

您可以在此处使用未记录的命令(OUTPUT COMMENT TEXT),但也有一个自定义扩展TEXT也旨在实现相同但需要通过以下方式明确下载: / p>

Utilities-->Extension Bundles-->Download And Install Extension Bundles--->TEXT

您可以使用OUTPUT COMMENT TEXT在GLM模型输出之前分配标题/描述性文本(在下面的示例中,我使用FREQUENCIES作为示例。)

get file="C:\Program Files\IBM\SPSS\Statistics\23\Samples\English\Employee data.sav".

oms /select all  /if commands=['output comment' 'frequencies'] subtypes=['comment' 'frequencies']
  /destination format=xlsx   outfile='C:\Temp\ExportOutput.xlsx'  /tag='ExportOutput'.

output comment text="##Model##: This is a long/descriptive title to help me identify the next model that is to be run - jobcat".
freq jobcat.

output comment text="##Model##: This is a long/descriptive title to help me identify the next model that is to be run - gender".
freq gender.

output comment text="##Model##: This is a long/descriptive title to help me identify the next model that is to be run - minority".
freq minority.

omsend tag=['ExportOutput'].

您也可以在这里使用TITLE命令,但它仅限于60个字符。 如果使用TITLETEXT

,则必须相应地更改OMS标记

编辑:

鉴于OP希望在输出查看器中实际向左侧窗格添加标题,因此解决方法如下(感谢Albert-Jan Roskam的Python代码):

首先保存python文件" editTitles.py"到一个有效的Python搜索路径(例如(对我来说):" C:\ ProgramData \ IBM \ SPSS \ Statistics \ 23 \ extensions")

#editTitles.py
import tempfile, os, sys
import SpssClient

def _titleToPane():
    """See titleToPane(). This function does the actual job"""
    outputDoc = SpssClient.GetDesignatedOutputDoc()
    outputItemList = outputDoc.GetOutputItems()
    textFormat = SpssClient.DocExportFormat.SpssFormatText
    filename = tempfile.mktemp() + ".txt"
    for index in range(outputItemList.Size()):
        outputItem = outputItemList.GetItemAt(index)
        if outputItem.GetDescription() == u"Page Title":
            outputItem.ExportToDocument(filename, textFormat)
            with open(filename) as f:
                outputItem.SetDescription(f.read().rstrip())
            os.remove(filename)
    return outputDoc

def titleToPane(spv=None):
    """Copy the contents of the TITLE command of the designated output document
    to the left output viewer pane"""
    try:
        outputDoc = None
        SpssClient.StartClient()
        if spv:
            SpssClient.OpenOutputDoc(spv)
        outputDoc = _titleToPane()
        if spv and outputDoc:
            outputDoc.SaveAs(spv)
    except:
        print "Error filling TITLE in Output Viewer [%s]" % sys.exc_info()[1]
    finally:
        SpssClient.StopClient()

重新启动SPSS Statistics并在下面作为测试运行:

get file="C:\Program Files\IBM\SPSS\Statistics\23\Samples\English\Employee data.sav".

title="##Model##: jobcat".
freq jobcat.

title="##Model##: gender".
freq gender.

title="##Model##: minority".
freq minority.

begin program.
import editTitles
editTitles.titleToPane()
end program.

TITLE命令最初会向主输出查看器(右侧)添加标题,但python代码会将该文本传输到左侧窗格输出树结构。如前所述,注意TITLE仅限60个字符,系统会触发警告以突出显示此字符。

enter image description here

此editTitles.py方法是您最接近包含描述性标题以识别每个模型的方法。替换实际标题"一般线性模型。"使用自定义标题需要脚本知识,并且需要更多代码。这是一种更简单的替代方法。这需要Python集成。

答案 1 :(得分:0)

还考虑使用:

SPLIT FILE SEPARATE BY <list of filter variables>. 

这将在左侧窗格中自动生成过滤器标签。

这对于互斥过滤器很容易使用,但即使您有重叠的过滤器,也可以重复运行多次(并应用过滤器以获得尽可能接近您想要的结果集)。

例如:

get file="C:\Program Files\IBM\SPSS\Statistics\23\Samples\English\Employee data.sav".
sort cases by jobcat minority.
split file separate by jobcat minority.
freq educ.
split file off.

enter image description here

答案 2 :(得分:0)

我想要和您发布的内容完全一样。这是旧文章,但我想弄清楚我的头。这就是我处理此问题的方式。预先通知。我要介绍的所有选项均未提供我想要的结果。在您的语法中

/ MEASURE =您的自定义名称

每个名称最多可以使用255个字节。有关更多信息,请参见MEASURE文档here

所以一个例子看起来像这样:

GLM Q1.5_1 Q1.5_2 BY Group 
    /WSFACTOR=measurement 2 Polynomial 
    /MEASURE= YourCustomName 
    /METHOD=SSTYPE(3) 
    /PLOT=PROFILE(measurement*Group) TYPE=LINE ERRORBAR=NO MEANREFERENCE=NO YAXIS=AUTO 
    /EMMEANS=TABLES(Group*measurement) 
    /PRINT=DESCRIPTIVE OPOWER HOMOGENEITY 
    /CRITERIA=ALPHA(.05) 
    /WSDESIGN=measurement 
    /DESIGN=Group.

我还没有找到获取标签名称并将其放入的方法。但是根据文档。无论如何,这不是应该使用的方式。所以这对我来说没有用。接下来,我要做的是更改图表的模板。为此,只需双击图表,然后在图表编辑器中打开即可。您可以在此处将标题更改为所需的任何名称。保存图表模板。为此,在图表编辑器中转到“文件”,然后保存图表模板。确保选中“文本内容”。

接下来您要做的是以下操作。在生成图表的代码之前(在本示例中,使用上面的代码)激活模板,并在代码运行后将其停用。因此,对于上面的示例,它看起来像这样:

* Activate the chart template
SET
    TLook='C:\PROGRA~1\IBM\SPSS\STATIS~1\26\Looks\APA_TimesRoma_12pt.stt' 
    Small=0.0001 
    CTemplate='C:\Users\scrip\Desktop\glm-template.sgt' 
    SUMMARY=None 
    THREADS=AUTO 
    TFit=Both 
    DIGITGROUPING=No 
    LEADZERO=No 
    TABLERENDER=light.

* Run your code. For me this is a single General linear model to keep things simple
GLM Q1.5_1 Q1.5_2 BY Group 
    /WSFACTOR=measurement 2 Polynomial 
    /MEASURE= YourCustomName 
    /METHOD=SSTYPE(3) 
    /PLOT=PROFILE(measurement*Group) TYPE=LINE ERRORBAR=NO MEANREFERENCE=NO YAXIS=AUTO 
    /EMMEANS=TABLES(Group*measurement) 
    /PRINT=DESCRIPTIVE OPOWER HOMOGENEITY 
    /CRITERIA=ALPHA(.05) 
    /WSDESIGN=measurement 
    /DESIGN=Group.

* Revert to default chart template
SET 
    TLook='C:\PROGRA~1\IBM\SPSS\STATIS~1\26\Looks\APA_TimesRoma_12pt.stt' 
    Small=0.0001 
    CTemplate=None 
    SUMMARY=None 
    THREADS=AUTO 
    TFit=Both 
    DIGITGROUPING=No 
    LEADZERO=No 
    TABLERENDER=light.

如果要获取与激活模板图表相关的代码,请转到选项,选择图表标签,然后选择使用图表模板文件,然后选择文件。这将在语法窗口中自动为您生成代码。只需复制粘贴,这就是您自己的语法文件。返回,选择使用当前设置

总而言之,您可以更改标题,但是我还没有弄清楚如何使用与变量的标签名称相对应的名称来命名每个图表。希望这可以帮助面临相同问题的人。