0

10 年間のデータがあり、変数 = の数を計算する必要があります。いくつかの変数の where variable=1の数。各年には、いくつかの共通変数といくつかの異なる変数があります。次のコードには、whereステートメントに問題があります。エラーメッセージは次のとおりです。ご協力いただきありがとうございます。

*ERROR 22-322: 構文エラー。次のいずれかが必要です: 名前、引用符で囲まれた文字列、数値定数、日時定数、欠損値、( 、、+、-、ALL、ANY、BTRIM、CALCULATED、CASE 、INPUT、PUT、SELECT、SOME、SUBSTRING、TRANSLATE、USER.

データセット ALL は次のとおりです。

Year   N_community
2000    15339
2001    15246
2002    15142
2003    14916
2004    14500
2005    14701
2006    14732
2007    14804
2008    13651
2009    13751

コードは次のとおりです。

/* For year 2000 to 2009 and the number of "missing" */
data health_status_vars_missing;
   set all;
run;
%let CmList = D_CFAIL D_CHD D_CHOLES D_DEPRSS D_HBP D_MYOCAR D_OTHHRT  D_PSYCHO;
%let CmCnt  = %sysfunc(countw(&CmList));
%macro countm(yr);
%do i=0 %to &yr.;
%do L=1 %to &CmCnt.;
    proc sql;
      create table %scan(&Cmlist., &L.)_M as 
      select 200&i as year, count(*) as %scan(&Cmlist., &L.)_M
      from cohort0&i.
      where %scan(&Cmlist., &L.)=.;
    quit;
    data health_status_vars_missing;
       merge health_status_vars_missing(in=a) %scan(&Cmlist., &L.)_M(in=b);
       by year;
       if a;
    run;
%end;
%end;
%mend countm;
%countm(9);
4

3 に答える 3

0

使用する

%unquote(where %scan(&Cmlist., &L.))=.;
于 2013-10-17T05:40:27.380 に答える
0

この問題を解決するには、最初にすべてのマクロ コードを削除する必要があります。次に、コードをリテラルで機能させます。マクロ コードの動作をシミュレートするためにコードを複製します。実用的な解決策が得られたら、マクロ コードを 1 つずつ元に戻します。%PUT ステートメントを使用して、マクロ変数が正しく解決されていることを確認します。

さらに助けが必要な場合は、誰かがコードを実行してエラーを確認できるように十分なサンプルデータを投稿してください...投稿されたように、それは不可能だと思います

于 2012-06-06T14:04:55.870 に答える