删除SAS数据集

时间:2012-09-11 14:40:22

标签: dataset sas

我的SAS程序完成后,我想删除几个数据集。我正在使用这个声明:

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

,其中

&sysparm评估为一个数字,temp评估为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;

6 个答案:

答案 0 :(得分:8)

您的代码没有明显的错误,除了不需要最后的RUN(QUIT足以支持PROC DATASETS)。我用这些参数创建了数据集,并且提供的代码运行正常。当你在proc语句之前有一些导致proc语句不能编译的东西时,通常会出现这个错误。例如:

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

会导致您提供的错误消息,以及几乎所有未正确结束的错误消息(尽管大多数其他错误都会导致前面的语句出现第二条错误消息。)

答案 1 :(得分:1)

查看您的日志,似乎您没有执行PROC DATASETS语句,因此`delete'语句以开放代码显示。正如Joe所说,你的代码中可能有一个流浪角色。如果没有,请从SAS日志中重新发送更多信息。包括上一步边界的所有内容。

答案 2 :(得分:1)

您还可以使用以下快速运行但被视为已被弃用的'过程:

 Proc Delete Data = Temp._all_;    *This will delete all datasets in temp;
 run;

答案 3 :(得分:0)

我怀疑SAS无法解析您带入& sysparm宏的任何内容。你检查了它的价值吗?

答案 4 :(得分:0)

我正在使用此

<?php
        $result = mysql_query("YOUR QUERY HERE");
            //echo mysql_result($result, 4,9);
            $values = array();
            while ($row = mysql_fetch_array($result))
             $values[] = $row[4]; 

            $min = min($values);    
            foreach($values as $val)
            {
              $addstr = ($val == $min) ? "text-warning":"text-success";
              echo '<p class="all-caps font-montserrat  no-margin '.$addstr.'">'.$val.'</p>';
            }
?>

然后只是%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;

答案 5 :(得分:0)

大多数开发人员都很好地回答了这个问题。但是我想提供更多信息。

实际上,“运行”或“退出”步骤是可选的。你把它用来表示数据步骤的完成情况。

当遇到其中一个时,SAS程序步骤终止:

  • &#34; next&#34;的开始DATA或PROC步骤
  • 达到明确的步骤边界(RUN;或QUIT;视情况而定)
  • 如果您在&#34;批次&#34;中提交作业模式(例如在主机上的SYSIN DD *中)并且遇到输入文件的末尾(在主机上为* /)。

除此之外,您还可以参考以下链接... https://communities.sas.com/t5/Base-SAS-Programming/Why-use-QUIT-with-proc-SQL/td-p/97992