SAS调用SYMPUT-一个宏变量,两个值?(有条件)
我想创建一个名为“currency_rate”的宏,它根据规定的条件调用正确的值 (新利率或1.5的静态值): 我对do循环和第一个数据步骤很满意。这是电话会议,但我一直在听。call symput是否是为一个宏指定两个可能值的正确函数 我将在proc sql中使用“货币汇率”的一个示例片段:SAS调用SYMPUT-一个宏变量,两个值?(有条件),sas,sas-macro,Sas,Sas Macro,我想创建一个名为“currency_rate”的宏,它根据规定的条件调用正确的值 (新利率或1.5的静态值): 我对do循环和第一个数据步骤很满意。这是电话会议,但我一直在听。call symput是否是为一个宏指定两个可能值的正确函数 我将在proc sql中使用“货币汇率”的一个示例片段: t1.income/¤cy_rate. 我是一个初级SAS用户,任何指导都会很好 谢谢宏变量只能保存一个值。 由于您只分配了一个值,因此可以轻松地使用CA
t1.income/¤cy_rate.
我是一个初级SAS用户,任何指导都会很好
谢谢宏变量只能保存一个值。 由于您只分配了一个值,因此可以轻松地使用CALL SYMPUTX()
但如果数据有多行,则该值将是数据集中的最后一个值集 让我们模拟一下你的情况。假设我们有3个数据集,如下所示-
data get_currency_1;
input month code $ new_rate currency_rate;
cards;
1 USD 2 2
2 CHF 2 1.5
3 GBP 1 1.5
;
data get_currency_2;
input month code $ new_rate currency_rate;
cards;
1 USD 3 1.5
2 USD 4 4
3 JPY 0.5 1.5
;
data get_currency_3;
input month code $ new_rate currency_rate;
cards;
1 USD 1 1.5
2 USD 3 1.5
3 USD 2.5 2.5
;
现在,让我们运行您的代码,为currency\u rate
指定一个值
让i=1这样,将访问数据集get\u currency\u 1
。当我们运行该步骤时,将访问每一行,currency\u rate
的值将分配给宏变量currency\u rate
,该迭代将持续到数据步骤结束。此时,货币汇率的最后一个值将是宏观变量货币汇率的最终值
,因为超过该值,步骤结束
%let i=1; /*Let's assign 1 to i*/
data _null_;
set get_currency_&i;
if month = &i and code = 'USD' then currency_rate=new_rate;
else currency_rate=1.5;
call symput ('currency_rate', currency_rate);
run;
%put Currency rate is: ¤cy_rate;
Currency rate is: 1.5
让i=3:
%let i=3; /*Let's assign 3 to i*/
data _null_;
set get_currency_&i;
if month = &i and code = 'USD' then currency_rate=new_rate;
else currency_rate=1.5;
call symput ('currency_rate', currency_rate);
run;
%put Currency rate is: ¤cy_rate;
Currency rate is: 2.5
一个宏变量不能有多个值。您说自己是初学者,所以最好的做法是在这一点上避免宏编程。您最好通过语句学习
where
、merge
(或join
)和
您声明您需要在以下语句中使用汇率
t1.income / ¤cy_rate.
t1.
对我来说意味着t1
是SQL联接中的别名,因此更可能的情况是,您需要将包含收入的表t1
与包含月度汇率的表1
(称之为月度数据)左联接
select
t1.income / coaslesce(monthly_datum.currency_rates,1.5)
, …
from
income_data as t1
left join
monthly_datum
on t1.month = monthly_datum.month
当收入与月度数据中不存在的月份相关时,将使用1.5的比率。感谢您的澄清!如果不是宏观变量,是否有其他方法可以将这两个条件应用于一个“汇率”?两个不同的在我的查询中不起作用
t1.income / ¤cy_rate.
select
t1.income / coaslesce(monthly_datum.currency_rates,1.5)
, …
from
income_data as t1
left join
monthly_datum
on t1.month = monthly_datum.month