3

我正在使用 Spss .net 库http://spss.codeplex.com创建一个 .sav 文件,但我似乎找不到如何创建案例。我正在使用 C#。

有人可以指出我正确的方向吗?

4

2 回答 2

4

为了避免使用本机 spssio32/64 并不得不处理 SPSS 的 32 位和 64 位问题,我们创建了 DLL 的本机实现。它基于 SPSS/PSPP 规范工作,是您之前提到的 SpssLib 的延续。

写入记录的示例如下:

// Create Variable list
var variables = new List<Variable>
{
    new Variable
    {
        Label = "The variable Label",
        ValueLabels = new Dictionary<double, string>
                {
                    {1, "Label for 1"},
                    {2, "Label for 2"},
                },
        Name = "avariablename_01",
        PrintFormat = new OutputFormat(FormatType.F, 8, 2),
        WriteFormat = new OutputFormat(FormatType.F, 8, 2),
        Type = DataType.Numeric,
        Width = 10,
        MissingValueType = MissingValueType.NoMissingValues
    },
    new Variable
    {
        Label = "Another variable",
        ValueLabels = new Dictionary<double, string>
                    {
                        {1, "this is 1"},
                        {2, "this is 2"},
                    },
        Name = "avariablename_02",
        PrintFormat = new OutputFormat(FormatType.F, 8, 2),
        WriteFormat = new OutputFormat(FormatType.F, 8, 2),
        Type = DataType.Numeric,
        Width = 10,
        MissingValueType = MissingValueType.OneDiscreteMissingValue
    }
};
// Set the one special missing value
variables[1].MissingValues[0] = 999;  

// Default options
var options = new SpssOptions();

using (FileStream fileStream = new FileStream("data.sav", FileMode.Create, FileAccess.Write))
{
    using (var writer = new SpssWriter(fileStream, variables, options))
    {
        // Create and write records
        var newRecord = writer.CreateRecord();
        newRecord[0] = 15d;
        newRecord[1] = 15.5d;
        writer.WriteRecord(newRecord);

        newRecord = writer.CreateRecord();
        newRecord[0] = null;
        newRecord[1] = 200d;
        writer.WriteRecord(newRecord);
        writer.EndFile();
    }
}

在GitHub 上查找源代码,在NuGet上查找二进制文件。

于 2016-05-19T09:57:09.440 回答
0

merthsoft 对以下 stackoverflow 帖子的回答为启动和运行 spss 提供了一个很好的起点。 在 C# 中使用 64 位 SPSS 库

我个人遇到的挂断包括所有适当的 dll,例如... spssio64.dll icudt32.dll icuin32.dll icuuc32.dll

导出数据时,所有列都必须是唯一的。

如果您遵循与 merthsoft 类似的模式,则创建案例的可能解决方案可能是包装和公开此方法...

[DllImport("spssio64.dll", EntryPoint = "spssCommitCaseRecord"...

我希望现在你已经让它工作了,但对于那些在未来遇到这个问题的人来说,这可能会有所帮助。

于 2013-07-24T15:42:12.620 回答