You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SPSS宏开发需求:批量导入、转换并合并多份CSV文件

用SPSS宏批量导入并合并月度CSV数据集

完全理解你的痛点——手动逐个导入合并不仅繁琐,后续修改变量还要重复改一堆代码,用宏来处理这类重复操作确实是最优解。下面我给你写一个通用的SPSS宏,能自动遍历2010到2019年的所有月度CSV文件,统一变量类型后合并成一个完整的数据集,以后要新增变量或者调整年份范围,只需要改几行参数就行。

完整宏代码

DEFINE !BatchImportMerge (
    Path = !TOKENS(1)
    , StartYear = !TOKENS(1)
    , EndYear = !TOKENS(1)
    , OutFile = !TOKENS(1)
)
* 定义月份缩写列表,对应文件名里的JAN/FEB...DEC.
!LET !Months = !QUOTE("JAN,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DEC")
!LET !MonthList = !SUBST(!Months, ",", " ")

* 初始化主数据集(先导入第一个文件作为基础).
!LET !FirstYear = !StartYear
!LET !FirstMonth = !HEAD(!MonthList, 1)
GET DATA /TYPE=TXT 
    /FILE=!CONCAT(!Path, "\DATA_", !FirstMonth, "_", !FirstYear, ".csv") 
    /ENCODING='Locale' 
    /DELCASE=LINE 
    /DELIMITERS=";" 
    /ARRANGEMENT=DELIMITED 
    /FIRSTCASE=2 
    /IMPORTCASE=ALL 
    /VARIABLES= 
        YEAR F4.0 
        MONTH F1.0 
        ID A11 
        VALUE F4.0 
        MOTIVE A32.
DATASET NAME MainData WINDOW=FRONT.

* 循环遍历剩余的年份和月份.
!DO !Y = !StartYear !TO !EndYear
    !DO !M !IN !MonthList
        * 跳过已经作为基础的第一个文件.
        !IF (!Y = !FirstYear & !M = !FirstMonth) !THEN !CONTINUE !IFEND
        
        * 导入当前月度文件.
        GET DATA /TYPE=TXT 
            /FILE=!CONCAT(!Path, "\DATA_", !M, "_", !Y, ".csv") 
            /ENCODING='Locale' 
            /DELCASE=LINE 
            /DELIMITERS=";" 
            /ARRANGEMENT=DELIMITED 
            /FIRSTCASE=2 
            /IMPORTCASE=ALL 
            /VARIABLES= 
                YEAR F4.0 
                MONTH F1.0 
                ID A11 
                VALUE F4.0 
                MOTIVE A32.
        DATASET NAME TempData WINDOW=FRONT.
        
        * 追加到主数据集.
        DATASET ACTIVATE MainData.
        ADD FILES /FILE=* /FILE=TempData.
        EXECUTE.
        
        * 删除临时数据集.
        DATASET CLOSE TempData.
    !DOEND
!DOEND

* 保存合并后的最终数据集.
SAVE OUTFILE=!OutFile /COMPRESSED.
DATASET CLOSE MainData.
!ENDDEFINE.

* 调用宏,替换成你的实际路径和参数.
!BatchImportMerge 
    Path="C:\Users\luizz\DATA" 
    StartYear=2010 
    EndYear=2019 
    OutFile="C:\Users\luizz\DATA\DATA_2010_2019.sav"

代码关键说明

  • 宏参数化:开头的!BatchImportMerge宏定义了4个参数,方便你后续修改文件路径、年份范围和输出文件名,不用改宏内部的核心逻辑。
  • 统一变量类型:直接在GET DATA里把ID设为A11、MOTIVE设为A32,省去了后续ALTER TYPE的步骤,确保所有文件的变量类型完全一致,避免合并时出现类型不匹配的问题。
  • 循环遍历:用两层!DO循环分别遍历年份和月份,自动生成每个CSV的文件名,不用手动写每个文件的导入代码。
  • 高效合并:初始创建主数据集后,每次导入的临时数据直接追加进去,最后一次性保存,比你之前两两合并的方式效率高很多。

使用和维护技巧

  1. 调用宏时,只需要修改最后几行的参数值,替换成你的实际文件路径和需求即可。
  2. 如果以后需要新增导入变量,只需要在宏里的/VARIABLES=部分添加对应的变量定义,所有文件都会自动应用这个修改,不用逐个调整。
  3. 如果需要扩展年份范围,比如到2020年,只需要把EndYear=2019改成EndYear=2020就行。

内容的提问来源于stack exchange,提问作者LuizZ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 18:17:51