より広範な問題として、OPEN STATEMENT RECURSION DETECTED
マクロ変数をそれ自体に割り当てる場合を指します。
%let &mvar = &mvar;
もちろん、これは通常、意図的に行われるわけではありません (と思う人もいるでしょう)。そうなった場合、通常は 2 つのクラスの間違いのいずれかの兆候です。
%let
セミコロン、終了括弧、終了引用符、またはステートメントの末尾にあるセミコロンが SAS で認識されない原因となるその他のものが欠落しています。次に、次のステートメントがマクロ コンテキストでマクロ変数を使用すると、SAS はそれを%let
ステートメントの一部として認識し、このエラー メッセージが表示されます。
- 何かがどこかで間違っていて、その何かが意味をなさないエラーをさらに下に伝播するという問題があります。一致しない引用符を持つことは、この典型的な例です
%mend
。
1 は、次のような単純なケースで発生する可能性があります。
%let mvar=mydataset
%put &mvar;
おっとっと。それほど単純な場合は、セミコロンをオンにするだけで問題ありません。ただし、括弧や引用符の不一致など、より重要な原因が原因である可能性があります。この場合、SAS セッションの再起動が必要になる場合があります。magic string
( のバリエーションである を送信すると%*;*;*';*";%*%mend;*);
、問題が解決する場合もありますが、そうでない場合もあります。SAS を再起動することは、それを解決するための信頼できる方法です)。
上記の 2 についても同様です。マジック ストリングで問題が解決しない場合は、単に SAS セッションを再起動する必要があるかもしれません。もちろん、一致しない引用符/括弧/などを見つける必要がありますが、最初にSASを最初からやり直して、それを理解できるようにする必要があります.