3

SASプロシージャの終了後に削除したいデータセットがいくつかあります。私はこのステートメントを使用しています:

proc datasets lib=temp;
    delete xtemp2&sysparm trades&sysparm tickers&sysparm;
quit;
run;

どこ

&sysparmtemp数値とに評価されlibnameます。ただし、ログファイルに次のエラーが記録されます。

142             delete xtemp2&sysparm trades&sysparm tickers&sysparm;
            ______
            180
ERROR 180-322: Statement is not valid or it is used out of proper order.

誰かが問題を知っていますか?

編集:

Here is some more of the log file to address the answer:
NOTE: "OUT_CSV" file was successfully created.
NOTE: PROCEDURE EXPORT used (Total process time):
      real time           0.27 seconds
      cpu time            0.12 seconds


142             delete xtemp2&sysparm trades&sysparm tickers&sysparm;
        ______
        180
ERROR 180-322: Statement is not valid or it is used out of proper order.

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

proc export data=temp.xtemp2&sysparm outfile=out_csv dbms=csv replace;
run;

proc datasets lib=temp;
    delete xtemp2&sysparm trades&sysparm tickers&sysparm;
quit;
run;
4

6 に答える 6

8

最後のRUNが必要ないことを除いて、コードに明確な問題はありません(PROC DATASETSにはQUITで十分です)。これらのパラメーターを使用してデータセットを作成しましたが、提供されたコードは正常に機能しました。多くの場合、このエラーは、procステートメントの直前にprocステートメントがコンパイルされない原因となる何かがある場合に発生します。例えば:

*
proc datasets lib=temp;
    delete xtemp2&sysparm trades&sysparm tickers&sysparm;
quit;

提供したエラーメッセージと、適切に終了しなかった他のほとんどすべてのエラーが発生します(ただし、その性質の他のほとんどのエラーは、前のステートメントで2番目のエラーメッセージを発生させます)。

于 2012-09-11T14:58:04.107 に答える
1

ログを見ると、ステートメントを実行していないようです。PROC DATASETSそのため、「delete」ステートメントが開いているコードに表示されています。ジョーが言ったように、あなたはおそらくあなたのコードに迷いの文字があります。そうでない場合は、SASログからより多くの情報を付けて再投稿してください。前のステップの境界からすべてを含めます。

于 2012-09-11T15:40:04.580 に答える
1

また、高速で実行されますが、「非推奨」の手順と見なされている次のものを使用することもできます。

 Proc Delete Data = Temp._all_;    *This will delete all datasets in temp;
 run;
于 2012-09-11T17:40:28.993 に答える
0

SASは、&sysparmマクロに価値のあるものを持ち込んだものを解析するのに問題があると思います。その値を確認しましたか?

于 2012-09-11T15:36:08.350 に答える
0

私はこれを使用しています

%macro drop / parmbuff store source
    DES="drop(table1,...tableN): Drops tables if they exists";
    %let num=1;
    %let stepneeded=0;
    %let stepstarted=0;
    %let dsname=%scan(&syspbuff,&num,',()');
    %do %while(&dsname ne); 
        %if %sysfunc(exist(&dsname)) %then %do;
            %let stepneeded=1;
            %if (&stepstarted eq 0) %then %do;
                proc sql;
                %let stepstarted=1;
            %end;
                drop table &dsname;
        %end;
        %if %sysfunc(exist(&dsname,view)) %then %do;
            %let stepneeded=1;
            %if (&stepstarted eq 0) %then %do;
                proc sql;
                %let stepstarted=1;
            %end;
                drop view &dsname;
        %end;
        %let num=%eval(&num+1);
        %let dsname=%scan(&syspbuff,&num,',()');
    %end;
    %if &stepstarted %then %do;
        quit;
    %end;
%mend drop;

その後、ちょうど%drop(work.mytable);

于 2016-05-04T11:57:58.740 に答える
0

ほとんどの開発者はこの質問に非常によく答えています。ただし、追加情報を載せたいと思います。

実際には、実行または終了のステップはオプションです。Uは、調査中のデータステップuaの完了を示すためにそれを置きます。

SASプロシージャの手順は、次のいずれかが発生すると終了します。

  • 「次の」DATAまたはPROCステップの開始
  • 明示的なステップ境界に到達しました(必要に応じて、RUN;またはQUIT;のいずれか)
  • 「バッチ」モード(メインフレームのSYSIN DD *など)でジョブをサブミットしていて、入力ファイルの終わり(メインフレームの* /)に遭遇した場合。

これに加えて、以下のリンクを参照できます... https://communities.sas.com/t5/Base-SAS-Programming/Why-use-QUIT-with-proc-SQL/td-p/97992

于 2017-07-12T11:51:52.983 に答える