使用haven :: write_sav()炸毁.sav文件大小

时间:2017-11-08 11:11:40

标签: r spss filesize r-haven

我正在使用包避风港从R编写SPSS .sav文件,这对我来说非常有用。但是我注意到使用write_sav()写在磁盘上的.sav文件大小似乎比nescessary大得多。每当我在SPSS中打开并保存由write_sav()写的.sav文件时,文件大小就会减少到10倍!

这对我很重要,因为我正在为其他人写SPSS相当大的数据,有时SPSS拒绝打开一个非常大的文件。如果write_sav()能够更有效地存储在"真正的"中,那么问题就不会出现。原生的SPSS方式?

有没有人知道这个问题,也许有一个有用的评论呢? 需要SPSS安装才能复制此问题

4 个答案:

答案 0 :(得分:0)

从Haven write_sav()文档中不清楚,但听起来它将它们保存为未压缩的.sav文件。 (大多数)SPSS安装的默认设置是保存为压缩文件。 SPSS有一个额外的压缩选项'zCompressed',它会生成更小的文件,但这些文件通常不能在SPSS之外打开。

你可以这样试验;

Save outfile = 'Uncompressed file.sav'
    /UnCompressed.
Save outfile = 'Compressed file.sav'
    /Compressed.
Save outfile = 'ZCompressed file.zsav'
    /ZCompressed.

请注意,.zsav文件扩展名不是必需的(可能是.sav),但最好的做法是使用它来明确兼容性可能存在的问题。

有关详细信息,请参阅https://www.ibm.com/support/knowledgecenter/en/SSLVMB_21.0.0/com.ibm.spss.statistics.help/syn_save_compressed_uncompressed.htm

答案 1 :(得分:0)

您的实际数据采用什么形式?是Codepage还是Unicode;避风港在做什么?从SPSS 16.0和引入UNICODE设置开始,从代码页转换为Unicode时,字符串字段的宽度增加了三倍。这是一次只能承受一次的痛苦。将您的数据保存为unicode,然后留在那里。

有关更多信息,请参见https://www.ibm.com/support/knowledgecenter/SSLVMB_26.0.0/statistics_reference_project_ddita/spss/base/syn_set_unicode.html

答案 2 :(得分:0)

如果输出大小有问题,则可以查看我的软件包readspss。使用压缩和zsav,您应该能够获得最佳的压缩率。 sav文件中的压缩取决于文件的写入方式。 SPSS具有不同的压缩方法来存储数字信息。数值只能存储为双精度(不压缩),也可以存储为双精度和int8_t的混合(压缩1)。 Zsav使用zlib压缩任何初始输入(压缩2)。八个整数取双倍大小,因此文件大小也不同。

答案 3 :(得分:0)

SPSS(.sav)文件格式有三种变体:

  1. 未压缩(.sav)。这是Haven的默认输出,但是根据我的经验很少使用。
  2. 压缩(.sav)。这是大多数人使用的方法,并且多年来一直是SPSS的默认保存格式。
  3. Zcompressed(.zsav,有时也为.sav)。几年前添加到SPSS,但似乎用处不大。您可以通过将Sub axis() Dim xytitle As chart Set xytitle = Worksheets("graph").ChartObjects(1).chart With xytitle.axes(xlCategory) .HasTitle = True .AxisTitle.Text = "Treatment" .AxisTitle.Font.Size = 11 .AxisTitle.Font.Bold = False End With With xytitle.axes(xlValue) .HasTitle = True .AxisTitle.Text = "Grain weight" .MaximumScale = 60 .MajorUnit = 10 .AxisTitle.Font.Size = 11 .AxisTitle.Font.Bold = False End With End Sub 添加到compress=TRUE
  4. 来从避风港中获取

我已提交pull request,以将压缩(2)格式设置为默认格式。