Как я могу читать несколько файлов Excel в SPSS с помощью макроса?

Я пытаюсь написать макрос для импорта 15 файлов в одном формате. Формат имени — «monyy PSF Extract». Поэтому я могу использовать приведенный ниже код для чтения в файле 1 для Nov11. Я попытался найти способ использовать макрос для чтения других 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.

person Enucera    schedule 11.02.2013    source источник


Ответы (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. 
person Andy W    schedule 11.02.2013
comment
Здорово. Спасибо. Я попробую! - person Enucera; 11.02.2013
comment
Превосходно! Это сработало. Спасибо большое. Глядя на написанный синтаксис, я вижу, что он прямолинеен. Но я действительно изо всех сил пытался добраться туда. СПАСИБО!! - person Enucera; 11.02.2013
comment
Полезно знать Enucera - не стесняйтесь проверить это, так как он отвечает на ваш вопрос и голосует. Удачи в переходе с SAS на SPSS. - person Andy W; 11.02.2013

Альтернативой может быть использование программируемости Python с выражением подстановочного знака для выбора всех файлов в определенном месте с указанным шаблоном имени. Более гибкий и избавляет от необходимости бороться с макросами. Вы можете узнать больше, загрузив книгу Programmaing and Data Management из раздела «Книги и статьи» на сайте сообщества SPSS по адресу www.ibm.com/developerworks/spssdevcentral.

person JKP    schedule 12.02.2013
comment
Это звучит неплохо. Похоже, у нас нет Python. Я могу увидеть, какова стоимость и преимущества, чтобы я мог оценить, можем ли мы купить это. - person Enucera; 20.05.2013