宏,用于在SPSS中打开,重新编码和堆叠多个.csv文件

问题描述

我正在尝试对以下宏进行编码:

  1. 将来自几个.csv顺序文件的列yearmonthidvaluemotive导入SPSS。这些文件的名称类似于:DATA_JAN_2010DATA_FEB_2010 [...],直到DATA_DEC_2019。这些是csv文件的第一个变量(最后提供了我用来导入此变量的代码)。

  2. 根据需要更改列类型id(a11)motive(a32)(需要堆叠所有文件)。

  3. 将所有这些数据集堆叠到名为DATA_2010_2019的新数据集中。

就目前而言,我正在做的是分别导入每个文件,然后堆叠并两两保存。但是,从效率的角度来看,这是如此重复和不合理。此外,如果将来需要导入其他变量,则需要重写每个文件的所有代码。这就是为什么我认为循环或宏将是处理这种重复代码的最明智的方式。真的很感谢您的帮助。

到目前为止,我的代码示例:

GET DATA  /TYPE=TXT
  /FILE="C:\Users\luizz\DATA\DATA_JAN_2010.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 A8.
CACHE.
EXECUTE.
DATASET NAME JAN_2010 WINDOW=FRONT.

ALTER TYPE MOTIVE (a32).

GET DATA  /TYPE=TXT
  /FILE="C:\Users\luizz\DATA\DATA_FEB_2010.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 A8.
CACHE.
EXECUTE.
DATASET NAME FEB_2010 WINDOW=FRONT.

DATASET ACTIVATE FEB_2010.
ALTER TYPE MOTIVE (a32).

DATASET ACTIVATE JAN_2010.
ADD FILES /FILE=*
  /FILE='FEB_2010'.
EXECUTE.

SAVE OUTFILE='C:\Users\luizz\DATA\DATA_JAN_FEV_2010.sav'
  /COMPRESSED.

解决方法

假设所有文件的参数都相同,则可以使用这样的宏:

define !getfiles ()
!do !yr=2010 !to 2019
!do !mn !in("JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC")
GET DATA 
  /TYPE=TXT /FILE=!concat('"C:\Users\luizz\DATA\DATA_',!mn,'_',!yr,'.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 A8.
CACHE.
EXECUTE.
ALTER TYPE id (a11) MOTIVE (a32).
dataset name tmp.
dataset activate gen.
add files /file=* /file=tmp.
exe.
!doend !doend
!enddefine.

所定义的宏将读取每个文件并将其添加到主文件中。在调用宏之前,我们将创建主文件:

data list list/YEAR (F4)  MONTH (F1) ID (A11) VALUE (F4) MOTIVE (A8).
begin data
end data.
exe.
dataset name gen.
* now we can call the macro.
!getfiles .
* now the data is all combined and we can save it.
SAVE OUTFILE='C:\Users\luizz\DATA\DATA_JAN_FEV_2010.sav'  /COMPRESSED.

注意:我使用了宏中原始帖子中的代码。请确保所有定义正确。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...