2017-03-01 14 views
0

の中に一重引用符の半分を保持します。 これは私に結果を与える:[email protected]; [email protected]; [email protected] これは私が欲しいものです。これは&電子メールと呼ばれるマクロ変数です。このセミコロンは任意の2つのメールの間に必要ですが、最後のメールの後にセミコロンはありません しかし、O'Connorのようなメールアドレスに一重引用符を持つ人の場合は、 %strは%STR(amy)を使用して一重引用符 と自動的に一致します。 [email protected]; [email protected]; lily.O'[email protected])はエラーの原因となります。 %strや%bquoteなどのマクロ引用符を使用すると、結果を得るにはどうすればよいでしょうか?[email protected]; [email protected]; lily.O'[email protected] その単一引用符を他に類を見ないものにするには?sas%strまたは%bquote%STR([email protected]; [email protected]; [email protected])を使用している場合、マクロ変数

EMAILリストはExcelのリストからインポートし、私はすでに、Excelファイル内の単一引用符の前に%を入れて:lily.O%'[email protected] とどのように私はマクロ変数&電子メールを取得することができます。値%str()内の値、つまり: [email protected]; [email protected]; lily.O%'[email protected] マクロ変数を%strに入れることができます)?

答えて

0

%STRでは、不一致の引用符に%記号を付ける必要があります。だから、試してみてください。

%STR([email protected];[email protected];lily.O%'[email protected]) 
+0

こんにちは、このメールリストはマクロ変数です。それはExcelのリストでSASにインポートされました。私はExcelの一重引用符の前にこの%を追加し、Excelシートから電子メールリストをインポートしました。 –

+0

質問を拡大して、どのエラーが表示されているか(エラーを表示するために実行しているコード)を表示してください。一重引用符をマスクするには%STR()が十分でなければなりませんが、それをどのように使用しているかによって、マクロ引用符を削除したり、間違った時刻に引用したりしている可能性があります。単純な例 '%let emaillist =%STR([email protected]; [email protected]; lily.O%'[email protected]);'うまく動作します – Quentin

1

を使用すると、マクロ変数にすでに値を持っている場合は、INTO句経由CALL SYMPUTX()関数呼び出しを介してデータのステップからまたはPROC SQLから言って、あなたはマクロの引用に値を%SUPERQ()マクロ機能を使用することができます。

data _null_; 
    call symputx('unquoted',"O'[email protected]"); 
run; 
%put Email list = %superq(unquoted); 

値が既にマクロ変数にある場合、%BQUOTE()関数も機能します。

%put Email list = %bquote(&unquoted); 

あなたも、それを作成した直後に引用したマクロを再定義マクロ変数を取得するために%SUPERQ()を呼び出すためにRESOLVE()機能を使用することができます。したがって、変数EMAIL_LISTを持つデータセットMYTABLEがある場合、このようなコードを使用してデータから一連の別々のマクロ変数(list1、list2など)を生成できます。

data _null_; 
    set mytable ; 
    length mvar rc $32 ; 
    mvar = cats('list',_n_); 
    call symputx(mvar,email_list); 
    rc = resolve(catx(' ','%let',mvar,'=%superq(',mvar,');')); 
run; 

第1の例示のデータステップが外側に文字列リテラル使用二重引用符のために動作し、したがって、不平衡単一引用符を保護しました。 %QSYSFUNC()マクロ関数を使用してDEQUOTE()関数を呼び出すことによって、マクロコードで同じことを行うことができます。値に二重引用符が含まれていると問題が生じることに注意してください。隣接する二重引用符に変換する必要があります。

%put Email list = %qsysfunc(dequote("O'[email protected]")); 
関連する問題