2

我正在尝试编写一个宏来导入 15 个文件,所有文件都采用相同的格式。名称格式为“monyy PSF Extract”。所以我可以使用下面的代码来读取 Nov11 的 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.
4

2 回答 2

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. 
于 2013-02-11T17:36:53.837 回答
0

另一种方法是使用带有通配符表达式的 Python 可编程性来获取具有指定名称模式的特定位置的所有文件。更灵活,避免使用宏。您可以从 SPSS 社区站点 www.ibm.com/developerworks/spssdevcentral 的 Books and Articles 部分下载 Programmaing and Data Management 一书以了解更多信息

于 2013-02-12T13:57:49.130 回答