SPSS Macro для открытия CSV из переменной - PullRequest
1 голос
/ 08 января 2012

Я новичок в макросах SPSS и пытаюсь открыть файл CSV по указанному пути в переменной.

Обратите внимание, что я хочу установить все переменные в верхней части файла, чтобы я мог легко решить импортировать другой файл с другим именем.

Это мой код:

/* settings */
define !SYMB() "VIX". !enddefine.
define !CSVFILE() "E:\Downloads\$" + !SYMB + ".csv". !enddefine.

/* import csv file */
GET DATA
  /TYPE=TXT
  /FILE=!CSVFILE
  /DELCASE=LINE
  /DELIMITERS=","
  /ARRANGEMENT=DELIMITED
  /FIRSTCASE=1
  /IMPORTCASE=ALL
  /VARIABLES=
  V1 5X
  Date ADATE10
  !SYMB + 'O' F7.2
  !SYMB + 'H' F7.2
  !SYMB + 'L' F7.2
  !SYMB + 'C' F7.2.
CACHE.
EXECUTE.
DATASET NAME "DataSet" + !SYMB WINDOW=FRONT.

К сожалению, я получаю следующие ошибки:

/ * настройки * / определить! SYMB () "VIX". ! ENDDEFINE. определить! CSVFILE () "E: \ Downloads \ $" +! SYMB + ".csv". ! ENDDEFINE.

Предупреждение № 207 в столбце 13. Текст: E: \ Downloads \ $ «+» Был найден после текстовой строки, указывающей продолжение, но следующий непустой символ не был кавычкой или апострофом.

/ * импорт CSV-файла * / GET DATA / TYPE = TXT / FILE =! CSVFILE

Error. Название команды: GET DATA (2256) Неверная подкоманда: FILE Выполнение этой команды прекращается.

Ошибка № 1. Название команды: + Первое слово в строке не распознается как команда SPSS Statistics. Выполнение этой команды прекращается. / DELCASE = ЛИНИЯ

Ошибка № 1. Имя команды: / DELCASE Первое слово в строке не распознается как команда SPSS Statistics. Выполнение этой команды прекращается. / DELIMITERS = "," / ARRANGEMENT = DELIMITED / FIRSTCASE = 1 / IMPORTCASE = ALL / VARIABLES = V1 5X Дата ADATE10! SYMB + 'O' F7.2

Ошибка № 1. Название команды: + Первое слово в строке не распознается как команда SPSS Statistics. Выполнение этой команды прекращается. ! SYMB + 'H' F7.2

Ошибка № 1. Название команды: + Первое слово в строке не распознается как команда SPSS Statistics. Выполнение этой команды прекращается. ! SYMB + 'L' F7.2

Ошибка № 1. Название команды: + Первое слово в строке не распознается как команда SPSS Statistics. Выполнение этой команды прекращается. ! SYMB + 'C' F7.2.

Ошибка № 1. Название команды: + Первое слово в строке не распознается как команда SPSS Statistics. Выполнение этой команды прекращается. КЭШ. ВЫПОЛНИТЬ.

Ошибка № 105. Имя команды: ВЫПОЛНИТЬ Эта команда недопустима до определения рабочего файла. Выполнение этой команды прекращается. НАИМЕНОВАНИЕ ДАННОГО КОМПЛЕКТА "DataSet" +! ОКНО СИМБА = ПЕРЕДНЯЯ.

Как мне это сделать?

Вывод на предложенный макрос :

/* settings */
define !SYMB() "VIX" !enddefine.
define !CSVFILE() !quo(!con("E:\Downloads\$", !unq(!eva(!SYMB)), ".csv")) !enddefine.
define !c(str1 = !tok(1) /str2 = !tok(1)) !con(!unq(str1), !unq(str2)) !end.
define !cq(str1 = !tok(1) /str2 = !tok(1)) !quo(!con(!unq(str1), !unq(str2))) !end.

/* import csv file */
GET DATA
  /TYPE=TXT
  /FILE=!CSVFILE /DELCASE=LINE
  /DELIMITERS=","
  /ARRANGEMENT=DELIMITED
  /FIRSTCASE=1
  /IMPORTCASE=ALL
  /VARIABLES=
  V1 5X
  Date ADATE10
  !c !str1=!SYMB str2="O" F7.2

>Warning # 210 in column 2.  Text: !str1
>A macro symbol is invalid in this context.
>The symbol will be treated as an invalid special character.
  !c !str1=!SYMB str2="H" F7.2

>Warning # 210 in column 2.  Text: !str1
>A macro symbol is invalid in this context.
>The symbol will be treated as an invalid special character.
  !c !str1=!SYMB str2="L" F7.2

>Warning # 210 in column 2.  Text: !str1
>A macro symbol is invalid in this context.
>The symbol will be treated as an invalid special character.
  !c !str1=!SYMB str2="C" F7.2.

>Warning # 210 in column 2.  Text: !str1
>A macro symbol is invalid in this context.
>The symbol will be treated as an invalid special character.

>Error.  Command name: GET DATA
>(2265) Unrecognized or invalid variable format.  The format is invalid.  For
>numeric formats, the width or decimals value may be invalid.
>Execution of this command stops.
CACHE.
EXECUTE.

>Error # 105.  Command name: EXECUTE
>This command is not valid before a working file has been defined.
>Execution of this command stops.
DATASET NAME !cq !str1="DataSet" !str2=!SYMB WINDOW=FRONT.

Тестовый вывод:

set err=off.
set mpr=on.
set printback=on.
  11  0 M>  set printback=on.

  12  0 M>  
!c str1="A" str2="B".
  13  0 M>  !c str1="A" str2="B".
!cq str1="A" str2="B".
  14  0 M>  !cq str1="A" str2="B".

  15  0 M>  
set printback=off.
  16  0 M>  set printback=off.

Ответы [ 2 ]

2 голосов
/ 09 января 2012

Язык макросов SPSS сложен.

1) Необходимо выполнить конкатенацию строк внутри макроса;

2) Избегать точек в командах макросов - если они не нужны;

3) Не заканчивайте строку макросом.

Попробуйте этот непроверенный синтаксис:

/* settings */
define !SYMB() "VIX" !enddefine.
define !CSVFILE() !quo(!con("E:\Downloads\$", !unq(!eva(!SYMB)), ".csv")) !enddefine.
define !c(str1 = !tok(1) /str2 = !tok(1)) !con(!unq(!str1), !unq(!str2)) !end.
define !cq(str1 = !tok(1) /str2 = !tok(1)) !quo(!con(!unq(!str1), !unq(!str2))) !end.

/* import csv file */
GET DATA
  /TYPE=TXT
  /FILE=!CSVFILE /DELCASE=LINE
  /DELIMITERS=","
  /ARRANGEMENT=DELIMITED
  /FIRSTCASE=1
  /IMPORTCASE=ALL
  /VARIABLES=
    V1 5X
    Date ADATE10
    !c str1=!SYMB str2="O" F7.2
    !c str1=!SYMB str2="H" F7.2
    !c str1=!SYMB str2="L" F7.2
    !c str1=!SYMB str2="C" F7.2.

EXECUTE.

DATASET NAME !cq str1="DataSet" str2=!SYMB WINDOW=FRONT.

Не могли бы вы запустить этот синтаксис теста и опубликовать результат, который вы получите в выходных данных.

set err=off.
set mpr=on.
set printback=on.

!c str1="A" str2="B".
!cq str1="A" str2="B".

set printback=off.
set mpr=off.
set err=on.
0 голосов
/ 09 января 2012

Макросы действительно сложны.Для ваших целей я предлагаю вам использовать более простую команду FILE HANDLE для определения ваших входных данных.Вы можете прочитать об этом в Справочном руководстве по синтаксису, доступном из меню Справка.

HTH, Jon Peck

...