【问题标题】:Export to CSV using SAVE TRANSLATE but empty values are exported as a single space使用 SAVE TRANSLATE 导出为 CSV,但空值导出为单个空格
【发布时间】:2021-08-12 16:00:46
【问题描述】:

我在 SPSS 中有一个数据集,请参阅下面的示例数据集。这只是一个示例,真正的示例由单独的外部进程提供,并且具有更多的列和行。在示例中,空值设置为 " ",但这也是 SPSS 中提供空值的方式,它在内部被视为空值/空值/缺失值。

data list list/FieldNam(a20) FormName(a20) FieldType(a20) Choices(a50) Required(F1) Identifier(a1) Minimum(f8) Maximum(f8).
begin data
"Field 1" "Form abc" "text" " " 1 "y" " " " "
"Field 2" "Form abc" "datetime" " " 1 "y" " " " "
"Field 3" "Form xyz" "radio" "0=never | 1=sometimes | 2=often | 3=always" " " " " " " " "
"Field 4" "Form xyz" "text" " " " " " " "1" "100"
"Field 5" "Form xyz" "radio" "0=no | 1=yes" " " " " " " " "
end data.

然后我使用以下语法将其保存为 CSV 文本文件。

SAVE TRANSLATE
/TYPE = CSV
/FIELDNAMES
/TEXTOPTIONS DELIMITER=',' QUALIFIER='"'
/OUTFILE = 'C:\Temp\my_csv_file.csv'
/ENCODING='Windows-1252'
/REPLACE.

生成的 CSV 文件包含以下内容,空值使用单个空格

FieldNam,FormName,FieldType,Choices,Required,Identifier,Minimum,Maximum
Field 1,Form abc,text, ,1,y, , 
Field 2,Form abc,datetime, ,1,y, , 
Field 3,Form xyz,radio,0=never | 1=sometimes | 2=often | 3=always, , , , 
Field 4,Form xyz,text, , , ,1,100
Field 5,Form xyz,radio,0=no | 1=yes, , , , 

但是,我希望空值只是空的,如下所示:

FieldNam,FormName,FieldType,Choices,Required,Identifier,Minimum,Maximum
Field 1,Form abc,text,,1,y,,
Field 2,Form abc,datetime,,1,y,,
Field 3,Form xyz,radio,0=never | 1=sometimes | 2=often | 3=always,,,,
Field 4,Form xyz,text,,,,1,100
Field 5,Form xyz,radio,0=no | 1=yes,,,,

所以我的问题是,是否可以像这样导出 SPSS 数据集?

导出的 csv 文件将用作另一个系统的输入,它无法处理 , , 空值。我知道我可以在记事本中打开它,然后在事后进行搜索和替换。但我想尽可能地自动化它,因为导出会更频繁地使用,所以这样会节省很多工作。

【问题讨论】:

    标签: csv export spss


    【解决方案1】:

    此页面的信息表明可以调用脚本:https://www.ibm.com/docs/en/spss-statistics/23.0.0?topic=reference-script

    脚本

    SCRIPT 运行脚本来自定义程序或自动化 定期执行的任务。您可以运行 Basic 脚本或 Python 脚本。

    SCRIPT 'filename' [(quoted string)]

    此命令立即生效。它不读取活动 数据集或执行待处理的转换。请参阅主题命令 订购以获取更多信息。

    发布历史

    16.0 版

    SCRIPT 命令运行的脚本现在与 命令语法流。

    17.0 版

    引入了运行 Python 脚本的能力。

    17.0 或更高版本每次导出后调用的示例 Python 脚本:

    import fileinput
    import os
    filename = 'C:\Temp\my_csv_file.csv'
    postfix = '.bak'
    with fileinput.FileInput(filename, inplace=True, backup=postfix) as file:
        for line in file:
            print(line.replace(', ', ',').replace(' ,', ','), end='') 
    try:
        os.remove(filename + postfix)
    except FileNotFoundError as e:
        pass
    

    脚本执行简单的搜索和替换。我已经包含了自动删除临时备份文件的代码,即使 Python 手册指出它会自动删除该文件。对我来说,目前它始终没有(因此手动删除文件)。但是,如果它不适合您,您可以删除该特定代码。

    当然,您也可以使用 Python 的 csv 模块并迭代行并将其写回另一个 csv 等。请参阅此处的文档:https://docs.python.org/3/library/csv.html

    【讨论】:

    • 运行 Python 脚本以在导出文件上自动执行搜索和替换操作并不理想,但它确实有效。我想仅使用 SPSS 语法是不可能的,因为这是唯一的答案。所以我会接受这个,谢谢你的帖子。
    猜你喜欢
    • 2021-05-19
    • 1970-01-01
    • 2023-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-14
    • 1970-01-01
    相关资源
    最近更新 更多