Sql 这可以在宏中运行吗?
我一直在尝试解决一个问题,并使用不同的方法来解决它。我创建了一个宏来获取实际值。sql生成一个包含我需要的值的HTML视图Sql 这可以在宏中运行吗?,sql,sas,Sql,Sas,我一直在尝试解决一个问题,并使用不同的方法来解决它。我创建了一个宏来获取实际值。sql生成一个包含我需要的值的HTML视图 %macro actualvalue(); proc sql noprint; %do i=1 %to %wordcount(&fieldlist); Select %scan(&fieldlist,&i) into :actualvar separated by ' ' FROM TableA Where Incid
%macro actualvalue();
proc sql noprint;
%do i=1 %to %wordcount(&fieldlist);
Select %scan(&fieldlist,&i) into :actualvar separated by ' ' FROM TableA Where
IncidentItemId=%scan(&incidentitemlist,&i);
%end;
quit;
%mend actualvalue;
但是,actualvar宏变量似乎无法捕获该值。我试图初始化宏变量的方式是否有问题,或者这不能在宏内部执行。如果您对此有任何想法,我们将不胜感激。至少您需要将PROC SQL语句放入DO循环中,因为您的目标是多次运行PROC SQL
%do i=1 %to %wordcount(&fieldlist);
proc sql noprint;
Select %scan(&fieldlist,&i) into :actualvar separated by ' ' FROM TableA
Where IncidentItemId=%scan(&incidentitemlist,&i);
%end;
不过,其余的我看不出有什么问题。对其进行测试并报告任何错误。
我将相应地修改此答案。我认为每次运行
do
循环时,它都会覆盖先前的actualvar
值。你需要使用类似于
select %scan(&fieldlist,&i) into :actualvar&i ...
然后打印出
&actualvar1
&actualvar2
等的值。。。检查您的结果。要解决宏构造问题,请尝试先手动插入数据…使用一些示例数据,我们可以为您提供帮助。请更清楚地解释您的问题。如前所述,宏在语法上是正确的,但没有意义。给出两个宏变量&fieldlist
和&incidentitemlist
的示例,并解释生成的宏变量&actualvar
所包含的内容。我不明白为什么需要重复proc sql
块。在一个块中包含多个select
语句是可以的。@最近的邮件是正确的-在一个块中可以很好地工作,但我喜欢Robbie的建议,因为如果您将整个块放入循环中,您将在运行时得到反馈。