我的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;
答案 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程序步骤终止:
除此之外,您还可以参考以下链接... https://communities.sas.com/t5/Base-SAS-Programming/Why-use-QUIT-with-proc-SQL/td-p/97992