Sql 这可以在宏中运行吗?

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

我一直在尝试解决一个问题,并使用不同的方法来解决它。我创建了一个宏来获取实际值。sql生成一个包含我需要的值的HTML视图

 %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的建议,因为如果您将整个块放入循环中,您将在运行时得到反馈。