如何基于参数数据集创建SAS宏变量?(附尝试失败代码)
解决从SAS数据集生成宏变量的问题
正确代码实现
data _null_; set have; call symputx(m_v_name, m_v_content); /* 运行时查看赋值结果 */ put m_v_name '=' m_v_content; run; /* 验证宏变量是否生成成功 */ %put ¯o_a ¯o_b ¯o_c;
原代码的问题分析
- 多余的数组和循环:你的数据集每行对应一个宏变量名和值,
set have会逐行读取数据,直接用当前行的m_v_name(宏变量名)和m_v_content(宏变量值)即可,数组和do循环完全没必要,反而会导致每行重复执行赋值操作。 - %put的使用错误:
%put是宏语句,在data步编译阶段就会执行,此时name[i]还不是运行时的变量值,宏处理器会尝试解析不存在的宏变量&name[i],所以输出内容不符合预期。要在data步运行时查看赋值情况,用SAS数据步的put语句即可。
运行正确代码后,会生成你需要的macro_a=5、macro_b=6、macro_c=30三个全局宏变量,后续可直接通过¯o_a这类方式调用。
内容的提问来源于stack exchange,提问作者Viona
相关产品推荐
相关产品推荐

