【问题标题】:Export SPSS output in a meaningful format (e.g. csv, tab)?以有意义的格式(例如 csv、tab)导出 SPSS 输出?
【发布时间】:2015-02-23 23:55:07
【问题描述】:

我有一些来自 SPSS 的输出,我已将其导出为 .txt 文件(但也导出为各种 Excel 格式)。下面是该文件中的一个 sn-p。我需要观察到的和预期的相关百分比,这将发生在数百个这样的输出中(许多不同的对数线性模型)。目前,它使用空格作为文本进行格式化,而作为 Excel,它在单个单元格中包含整行。我试图避免编写代码来破译这一点,因为考虑到输出的整体大小、它们中空间的位置等,这也会令人担忧。

有人有什么想法吗?

一个明确的解决方案是使用不同的包,但是在 SPSS LOGLINEAR 语法中指定多项式对比并为我计算权重的能力无法在其他地方轻松实现(即,这可能是可能的,但超出了我的技能)。

 Observed, Expected Frequencies and Residuals

       Factor          Code              OBS. count & PCT.   EXP. count & PCT.      Residual   Std. Resid.   Adj. Resid.


  deg_code        0
   res_code        100
    edge_cod        2.520                    13.00 (  .29)      112.75 ( 2.56)      -99.7500       -9.3941       -9.8118
    edge_cod        0.630                    40.00 (  .91)      112.75 ( 2.56)      -72.7500       -6.8513       -7.1560
    edge_cod        0.315                   130.00 ( 2.95)      112.75 ( 2.56)       17.2500        1.6245        1.6968
    edge_cod        0.105                   194.00 ( 4.40)      112.75 ( 2.56)       81.2500        7.6518        7.9921
   res_code        85
    edge_cod        2.520                    21.00 (  .48)      112.75 ( 2.56)      -91.7500       -8.6407       -9.0249
    edge_cod        0.630                    60.00 ( 1.36)      112.75 ( 2.56)      -52.7500       -4.9678       -5.1887
    edge_cod        0.315                   136.00 ( 3.08)      112.75 ( 2.56)       23.2500        2.1896        2.2870
    edge_cod        0.105                   194.00 ( 4.40)      112.75 ( 2.56)       81.2500        7.6518        7.9921
   res_code        70
    edge_cod        2.520                    70.00 ( 1.59)      112.75 ( 2.56)      -42.7500       -4.0260       -4.2051
    edge_cod        0.630                   117.00 ( 2.65)      112.75 ( 2.56)        4.2500         .4002         .4180
    edge_cod        0.315                   164.00 ( 3.72)      112.75 ( 2.56)       51.2500        4.8265        5.0412
    edge_cod        0.105                   214.00 ( 4.85)      112.75 ( 2.56)      101.2500        9.5354        9.9594

  deg_code        8
   res_code        100
    edge_cod        2.520                    17.00 (  .39)      120.08 ( 2.72)     -103.0833       -9.4069       -9.8252
    edge_cod        0.630                    56.00 ( 1.27)      120.08 ( 2.72)      -64.0833       -5.8480       -6.1080
    edge_cod        0.315                   138.00 ( 3.13)      120.08 ( 2.72)       17.9167        1.6350        1.7077
    edge_cod        0.105                   195.00 ( 4.42)      120.08 ( 2.72)       74.9167        6.8366        7.1405
   res_code        85
    edge_cod        2.520                    27.00 (  .61)      120.08 ( 2.72)      -93.0833       -8.4944       -8.8721
    edge_cod        0.630                    72.00 ( 1.63)      120.08 ( 2.72)      -48.0833       -4.3879       -4.5830
    edge_cod        0.315                   146.00 ( 3.31)      120.08 ( 2.72)       25.9167        2.3650        2.4702
    edge_cod        0.105                   200.00 ( 4.54)      120.08 ( 2.72)       79.9167        7.2928        7.6171
   res_code        70
    edge_cod        2.520                    82.00 ( 1.86)      120.08 ( 2.72)      -38.0833       -3.4753       -3.6298
    edge_cod        0.630                   119.00 ( 2.70)      120.08 ( 2.72)       -1.0833        -.0989        -.1033
    edge_cod        0.315                   172.00 ( 3.90)      120.08 ( 2.72)       51.9167        4.7377        4.9483
    edge_cod        0.105                   217.00 ( 4.92)      120.08 ( 2.72)       96.9167        8.8442        9.2374

  deg_code        16
   res_code        100
    edge_cod        2.520                    39.00 (  .88)      134.67 ( 3.05)      -95.6667       -8.2439       -8.6104
    edge_cod        0.630                    67.00 ( 1.52)      134.67 ( 3.05)      -67.6667       -5.8310       -6.0903
    edge_cod        0.315                   132.00 ( 2.99)      134.67 ( 3.05)       -2.6667        -.2298        -.2400
    edge_cod        0.105                   211.00 ( 4.78)      134.67 ( 3.05)       76.3333        6.5779        6.8703
   res_code        85
    edge_cod        2.520                    48.00 ( 1.09)      134.67 ( 3.05)      -86.6667       -7.4683       -7.8004
    edge_cod        0.630                    87.00 ( 1.97)      134.67 ( 3.05)      -47.6667       -4.1076       -4.2902
    edge_cod        0.315                   161.00 ( 3.65)      134.67 ( 3.05)       26.3333        2.2692        2.3701
    edge_cod        0.105                   212.00 ( 4.81)      134.67 ( 3.05)       77.3333        6.6640        6.9603
   res_code        70
    edge_cod        2.520                    92.00 ( 2.09)      134.67 ( 3.05)      -42.6667       -3.6767       -3.8402
    edge_cod        0.630                   151.00 ( 3.42)      134.67 ( 3.05)       16.3333        1.4075        1.4701
    edge_cod        0.315                   195.00 ( 4.42)      134.67 ( 3.05)       60.3333        5.1991        5.4303
    edge_cod        0.105                   221.00 ( 5.01)      134.67 ( 3.05)       86.3333        7.4396        7.7704

【问题讨论】:

  • @pnuts 这是一个足够的解决方案,感谢您的提示。我不确定如何让您的评论成为答案?
  • @pnuts 也许更适合stackexchange
  • 我使用了 SPSS Python 模块并找到了一种将文本输出保存为 .cvs 文件的方法,该文件使用分号(或类似的东西)作为分隔符。但是,要提供适当的解决方案,我需要知道您的 SPSS Viewer File 的外观。它是否包含一系列对数线性输出?你觉得 csv 怎么样。文件?每个对数线性结果一个文件,还是整个查看器输出一个文件?
  • @mirirai 输出可以是任何格式,只要单元格包含值,而不是奇怪的额外位,如单括号,以及分布在多个单元格上的爬升禁令(这发生在空格分隔中)。查看器文件包含许多输出,这些输出都作为一个可点击的信息块出现。每个都包含完整的分析。

标签: excel csv export output spss


【解决方案1】:

一旦在 Excel 中,您可以使用带有空格作为分隔符的文本到列来将单个单元格解析为多个单元格。完成此操作后,如果您更喜欢 .csv 格式,您可以选择将结果保存为字符分隔值。

【讨论】:

  • 我已经接受了您的回答,并为其他对 Excel 了解较少的人编写了更全面的说明列表。再次感谢。
  • 我需要等两天,而且,你的就是答案,我的只是一个阐述。
【解决方案2】:

对于来自 Google 的人,@pnuts 给了我一个我忽略的简单答案; Excel 中的“文本到列”。

对于那些不知道(我不知道)的人,将 SPSS 数据输出作为 Excel 转换为可用(即单元格中的值)格式的过程如下: 通过右键单击并选择导出,从 SPSS 导出数据输出,选择 excel 格式和目标。或者,您可以使用此语法(填写文件路径):

   *Export Output to Excel.
  OUTPUT EXPORT
  /CONTENTS  EXPORT=ALL  LAYERS=PRINTSETTING  MODELVIEWS=PRINTSETTING
  /XLS  DOCUMENTFILE='C:\FILEPATHHERE'
     OPERATION=CREATEFILE
     LOCATION=LASTCOLUMN  NOTESCAPTIONS=YES.

获得文件后,您会注意到所有数据/输出都在第 1 列中。

  1. 选择数据列
  2. 单击功能区中的数据 > 文本到列
  3. 选择“分隔”>下一步
  4. 确保选中“文本”和“将连续分隔符视为一个”> 下一步
  5. 最后您可以调整数据类型或直接完成。

我知道这是一个简单的过程,但多年来我一直认为人们对这些事情有不同程度的了解,虽然 Stackoverflow 的常客可能对此很感兴趣,但奇怪的 Google 员工可能不会。

编辑* 我目前正在使用的另一种解决方案(一次只有几个输出)是在 SPSS 中右键单击“复制特殊”,作为文本,然后在 excel 中粘贴特殊,并保留源格式。这可能会被比我聪明的人制作成宏!

-亚历克斯

【讨论】:

    【解决方案3】:

    您是否考虑过使用 GENLOG 而不是非常古老的 LOGLINEAR 过程,它只产生纯文本输出? GENLOG (Analyze>Loglinear>General) 生成常规数据透视表输出以及残差和预测值变量,因此可以使用 Output Export 或 OMS 将其输出直接导出到 Excel,而无需在 Excel 上大惊小怪

    【讨论】:

    • 我需要它,因为它能够指定多项式权重,GENLOG 会因此变慢吗?另外我的uni安装可能没有,是学生2011版。
    • 您可以在从帮助菜单访问的命令语法参考中阅读 LOGLINEAR 和 GENLOG 方法的详细比较。
    【解决方案4】:

    我必须同意 JKP,使用较新的 GENLOG 程序可能是更好的方法。但是,在某些情况下,您可能希望将文本输出转换为 csv 文件。因此我喜欢分享这个解决方案。

    在这个解决方案中,我借助 SpssClient Python 类对查看器输出进行 grep,然后利用一些本机 函数来操作文本输出并将其保存为 csv 文件。

    我使用 SPSS 示例文件中的“demo.sav”作为示例数据。

    **** create some sample output ****.
    
    GET FILE='/opt/IBM/SPSS/Statistics/22/Samples/English/demo.sav'.
    
    LOGLINEAR inccat (1,4) jobsat (1,5)
       /DESIGN inccat.
    
    LOGLINEAR inccat (1,4) ownpc (0,1)
       /DESIGN inccat.
    
    **** transform output to csv files ****
    
    BEGIN PROGRAM.
    import csv
    import re
    import os
    import SpssClient
    
    # define directory where the csv files will be stored
    os.chdir("/your/path/to/directory/")
    
    # define csv file basename
    basename = 'loglin'
    
    # define delimeter for csv files
    delim = ';'
    
    
    SpssClient.StartClient()
    
    OutputDoc = SpssClient.GetDesignatedOutputDoc()
    OutputItems = OutputDoc.GetOutputItems()
    
    # create list wich contains the several text outputs 
    # of the LogLinear procedures
    TextItems = []
    
    for index in range(OutputItems.Size()):
       OutputItem = OutputItems.GetItemAt(index)
       if (OutputItem.GetType() == SpssClient.OutputItemType.TEXT 
       and OutputItem.GetProcedureName() == 'Loglinear'):
          TextItem = OutputItem.GetSpecificType()
          TextItems.append(TextItem.GetTextContents())
    
    SpssClient.StopClient()
    
    # some fine tuning, so that actual values get into
    # one table cell, without brackets and stuff like that
    def stringadj (astring):
       astring = re.sub(r' +\( *', delim, astring) # replace left bracket by delimeter
       astring = re.sub(r'\)', '', astring) # remove right bracket
       astring = re.sub(r' & ', delim, astring) # replace '&' by delimeter
       astring = re.sub(r'= ?', '=' + delim, astring) # replace '=' by delimeter
       astring = re.sub(delim + delim, delim, astring) # replace double delimeter by single delimeter
       return astring
    
    # define cvs style
    csv.register_dialect('loglinstyle', delimiter=delim)
    
    # split output strings into several lines
    # do necessary text adjustments
    # and store each output in a seperate (enumerated) csv file
    for position, item in enumerate(TextItems):
       lltable = [re.sub(r' ( )+', delim, line.lstrip().rstrip()) for line in item.split("\n")]
    
       lltable = [stringadj(line) for line in lltable]
    
       filename = basename + str(position+1) + '.csv'
    
       with open(filename, 'wb') as f:
          writer = csv.writer(f, 'loglinstyle')
          writer.writerows(csv.reader(lltable, 'loglinstyle'))
    
    END PROGRAM.
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-23
      • 1970-01-01
      • 2011-06-17
      • 2020-04-20
      • 2011-04-17
      • 2018-07-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多