1

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.

列 13 の警告 # 207。テキスト: E:\Downloads\$ テキスト文字列の後に継続を示す「+」が見つかりましたが、次の非空白文字は引用符またはアポストロフィではありませんでした。

/* csv ファイルをインポート */ GET DATA /TYPE=TXT /FILE=!CSVFILE

エラー。コマンド名: 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。 コマンド名: EXECUTE このコマンドは、作業ファイルが定義される前には有効ではありません。このコマンドの実行は停止します。データセット名 "DataSet" + !SYMB WINDOW=FRONT.

これをどのように行う必要がありますか?

提案されたマクロの出力:

/* 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.
4

2 に答える 2

2

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.
于 2012-01-08T22:06:01.930 に答える
0

マクロは確かに難しいです。目的のために、より単純な FILE HANDLE コマンドを使用して入力を定義することをお勧めします。これについては、[ヘルプ] メニューからアクセスできるシンタックス リファレンス マニュアルを参照してください。

HTH、ジョン・ペック

于 2012-01-09T12:57:57.843 に答える