SAS代码在交互和批处理模式下的行为不同
我有以下在宏中运行的代码。当它在交互模式下运行时,它运行完全正常,没有错误或警告。这是过去两年的情况 同一代码现在已在批处理模式下部署,并生成警告SAS代码在交互和批处理模式下的行为不同,sas,sas-macro,Sas,Sas Macro,我有以下在宏中运行的代码。当它在交互模式下运行时,它运行完全正常,没有错误或警告。这是过去两年的情况 同一代码现在已在批处理模式下部署,并生成警告警告:未解析明显符号引用FIRSTRECCOUNT。且未为宏变量指定值 我的问题是,有人知道为什么批处理模式和交互模式会有不同的表现吗 以下是更多信息: 正在创建数据集,该数据集位于工作库中 数据集确实是按数据步骤打开的 `“firstreccount”不会在程序中的任何其他位置进行初始化 我有一个搜索sas社区。有一个主题,但我在批初始化中没有答案中
警告:未解析明显符号引用FIRSTRECCOUNT。
且未为宏变量指定值
我的问题是,有人知道为什么批处理模式和交互模式会有不同的表现吗
以下是更多信息:
attr
来获取观察数。这消除了警告,但程序仍然会失败,警告会在不同的地方弹出。这让我觉得罗伯特·帕特里奇是对的。同时,我得到一个错误,宏没有被解析。DI studio插入宏以收集性能MI,即使作业并不打算收集MI。这让我觉得SAS DI studio在部署时没有正确生成代码,因此我手动编辑了部署的代码以删除有问题的宏调用,并且我还发现有一行带有MD5函数的代码在一行上太长,因为传递给它的参数太多,所以我插入了一些空白。问题终于解决了
我仍然需要对作业做些什么,因为当它从sasdi重新部署时,它将再次生成相同的错误。我现在没有时间进一步研究这个问题
结论:您在SAS DI中编写的内容和部署的内容可能略有不同,这可能会导致语法分析在随机位置抛出错误。因此,我会将罗伯特的答案标记为正确,因为它使我比其他任何答案更接近于解决问题 我希望您的程序上面有一些小错误,这些错误不会导致SAS在交互运行时进入语法检查模式,但会导致SAS在批运行时将obs设置为0并进入语法检查模式。问题可能发生在您粘贴的代码段上方。解析器在早些时候陷入了恐慌,最后发出了关于代码的警告,这是完全正确的
检查以确保宏中的代码在一行中长度不超过160个字符。我尽量将代码保持在这一水平以下,但长代码行可以以交互方式正常运行,并在批处理中失败—特别是在宏内部时。一种可能性是您提交的SAS程序中的行长度限制(在批处理模式下): 见:
您正在运行哪个版本的SAS?对我来说没有意义。我会加上“这行跑”;在STOP语句之前,确保执行调用symput。并添加%put>&firstreccountAdd symbolgen和mprint并发布日志。典型的错误是行长度太长,但代码中没有任何内容太长,限制为256。您是如何执行批处理的?与interactive相同的用户Id?SECONDSET的值是多少?SASLOG 1750-1754线路上有什么?显示更多日志,不要编辑它。您是否尝试过调用symputx('FIRSTRECCOUNT',X',G')?可能出于某种原因,它将宏存储在本地符号表中。“这至少可以排除这个问题。”昆汀我花了一些时间,但我已经用我的发现更新了我的问题。这一切都与SAS DI studio在部署时如何更改代码有关。如果发生这种情况,您至少会在日志中看到一条关于“SAS set obs=0并将继续”的注释。你有一个好的日志扫描程序来查找任何早期的错误/警告/错误注释吗?我已经记住了你程序中的错误。你必须找到它。例如,在我的网站上,EG使用validvarname=ANY,而批处理使用validvarname=V7,这可能会导致在EG中开发的程序出错,但随后会在批处理中运行。这一点很好。截断的行在日志中至少抛出一个注释,甚至可能是一个警告。所以一个好的日志扫描器应该能捕捉到它。啊,是的,你已经涵盖了我的观点。就我个人而言,我将所有的.sas文件保留为80个字符或更少,这使得它们在扩散时更容易在单个屏幕上看到..嘿@RawFocus,它是9.3,你可能有道理。我会在我的问题中留下我的结果,以解决每个人的观点,并分享我的发现。
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.