【发布时间】:2023-03-23 20:13:01
【问题描述】:
我正在处理一个数据集,我事先不知道它的内容。我的目标 SAS 实例是 9.3,我不能使用 SQL,因为它具有某些不能用作列名的“保留”名称(例如“用户”)。
谜题如下所示:
data _null_;
set some.dataset; file somefile;
/* no problem can even apply formats */
put name age;
/* how to do this without making new vars? */
put somefunc(name) max(age);
run;
我不能输入var1=somefunc(name); put var1;,因为这可能会与名为var1 的源变量发生冲突。
我猜答案是创建一些宏函数来读取数据集标题并返回一个“安全”(非冲突)变量,或者一个格式的 fcmp 函数,但我想我会检查与社区一起看看 - 是否有一些“老派”的方式直接从函数中输出数据?
【问题讨论】:
-
SAS 和 PROC SQL 允许您使用任何有效的名称。在 SQL 中,您可能需要使用名称文字“user”n,或设置 DQUOTE=ANSI 选项并使用“user”。
-
天哪 - 可怕的“名称文字”可能是答案,可以简单地在源上强制执行
validvarname=v7和 -'job done'n? -
友情提醒,还有 NLITERAL() 函数可以将名称格式化为正确的格式。
-
请注意,NLITERAL() 不会将 USER 转换为 'USER'n,因为它不是 SAS 的无效名称。问题在于它是 SQL 中的保留字。
标签: sas