如何使用宏读取SPSS中的多个excel文件?

时间:2013-02-11 14:59:41

标签: macros spss

我正在尝试编写宏来导入15个文件,所有文件都采用相同的格式。名称格式是“monyy PSF Extract”。所以我可以使用下面的代码来读取11月11日的1个文件。我试图找到一种使用宏来读取其他14个文件的方法。我似乎无法使其发挥作用。我是SPSS的新手 - 我知道如何在SAS中做到这一点。 我还想将创建的数据集设置为monyy。我还想将一些变量重命名为original_name_monyy。

有人可以帮我吗?这让我疯了!

define !XLSFILE() !quote(!con("S:\Credit Risk\Credit Risk\Elisabeth\",!unquote(!eval(!cq)), ".xlsx")) !enddefine.
define !cq(mon = !DEFAULT ("Nov11") !token(1) /name = !DEFAULT ("PSF Extract") !TOKENS(2)) !quo(!con(!unq(!mon),!unq(" "), !unq(!name))) !enddefine.


/* import xlsx file */.
GET DATA
  /TYPE=XLSX
  /FILE=!XLSFILE
  /SHEET=name 'Sheet1'
  /CELLRANGE=full
  /READNAMES=on
  /ASSUMEDSTRWIDTH=32767.

EXECUTE.

DATASET NAME  test WINDOW=FRONT.

2 个答案:

答案 0 :(得分:2)

您可以在宏调用中传递文件名预修复列表,然后循环加载文件。以下是我将如何处理这个问题。这有点限制,因为你需要传递月份列表,但这是一项相当简单的任务。

*******************************************************.
DEFINE !XLSFILE(location = !TOKENS(1)
                /names = !CMDEND).

!DO !monthfile !IN (!names)

!LET !XLSFILE = !QUOTE(!CONCAT(!UNQUOTE(!location),!monthfile," PSF Extract.xlsx"))

/* import xlsx file */.
GET DATA
  /TYPE=XLSX
  /FILE=!XLSFILE
  /SHEET=name 'Sheet1'
  /CELLRANGE=full
  /READNAMES=on
  /ASSUMEDSTRWIDTH=32767.
*Name dataset.
dataset name !monthfile.

**PLACE RENAME COMMANDS HERE.
*Example changing [XVAR1] and [XVAR2] to [XVAR1_monyy] and [XVAR2_monyy].
rename variables (XVAR1 = !CONCAT("XVAR1","_",!monthfile))
(XVAR2 = !CONCAT("XVAR2","_",!monthfile)).

!DOEND.

*now do whatever you want with the datasets, eg add files them together.
!ENDDEFINE.
*******************************************************.

*call the macro.
set mprint on.
!XLSFILE location = "S:\Credit Risk\Credit Risk\Elisabeth\"
names = Jan11 Feb11 Mar11 Apr11 May11 Jun11 Jul11 Aug11 Sep11 Oct11 Nov11 Dec11. 

答案 1 :(得分:0)

另一种方法是使用带有通配符表达式的Python可编程性来获取具有指定名称模式的特定位置中的所有文件。更灵活,避免了与宏斗争的需要。您可以从SPSS社区站点的“书籍和文章”部分下载“编程和数据管理”一书,了解更多信息,网址为www.ibm.com/developerworks/spssdevcentral