我在宏中运行以下代码。当它以交互模式运行时,它运行绝对正常,没有错误或警告。过去两年就是这种情况。
现在已在批处理模式下部署相同的代码,它会生成警告WARNING: Apparent symbolic reference FIRSTRECCOUNT not resolved.
,并且没有为宏变量分配值。
我的问题是,有没有人有任何想法为什么批处理模式和交互模式会表现不同?
这里有更多信息:
正在创建数据集,它位于工作库中。
数据集确实按数据步骤打开。
1735 %LET FIRSTSET = work.dataset1;
1744 DATA _NULL_;
1745 IF 0 THEN
1746 SET &FIRSTSET NOBS=X;
1747 CALL SYMPUT('FIRSTRECCOUNT' ,X);
1748 STOP;
1749 RUN;
1755 DATA _NULL_;
1756 IF 0 THEN
1757 SET &SECONDSET NOBS=X;
1758 CALL SYMPUT('SECONDRECOUNT' ,X);
1759 STOP;
1760 RUN;
WARNING: Apparent symbolic reference FIRSTRECCOUNT not resolved.
更新
所以我试图通过将带有警告的代码复制到单独的调度流中来复制错误,但它根本不会导致任何错误。
顺便说一句,原来的工作是从SAS DI工作室部署的。我检查了用户编写的代码节点中的所有行,并确保长度在@RawFocus,@ RobertPentridge建议的80个字符内,但它没有解决问题。 正如@data_null所推荐的那样,我检查了VALIDVARNAME,它在交互式(“任何”的值)和批处理模式(“V7”的值)之间有所不同,但改变这些并没有任何区别。
我已经重写了逻辑,通过调用attr
来获取开放数据集来获取观察数量。这消除了警告,但程序仍然会失败并在不同的地方突然出现警告。这让我觉得罗伯特帕特里奇是正确的。与此同时,我得到一个宏没有解决的错误。 DI工作室插入宏以收集性能MI,即使该工作不是为了收集MI。这让我觉得SAS DI studio在部署代码时没有正确生成代码,所以我手动编辑了已部署的代码以删除有问题的宏调用,我还发现有一行代码,MD5函数在一行上太长了因为有很多参数传递给它,所以我插入了一些空格。最后问题得到解决!!
我仍然需要对该工作做些什么,因为当它从SAS DI重新部署时,它将再次产生相同的错误。我现在没有时间进一步研究这个问题。
结论:您在SAS DI中编写的内容以及部署的内容可能略有不同,这可能导致语法分析在随机位置引发错误。因此,我将罗伯特的答案标记为正确,因为它让我更接近解决问题然后任何其他答案。
答案 0 :(得分:2)
问题可能发生在您粘贴的代码段之上。解析器早些时候陷入了困境,并最终发出了关于完全正常的代码的警告。
检查以确保宏中的代码不会超过单行上的〜160个字符。我尝试将代码保持在低于该值,但长行代码可以交互运行并且批量运行失败 - 特别是在宏内部时。
答案 1 :(得分:0)
我希望您的程序有一些小的错误,这不会导致SAS在交互式运行时进入语法检查模式,但会导致SAS将obs设置为0并在批处理运行时进入语法检查模式。
答案 2 :(得分:0)