全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
5926 6
2012-05-09
请问大神们;
    有没办法将已赋值的全局宏变量作类型转换。
    比如:
%let DD=05;
proc sql;
select * from x&DD.;
where y=&DD.;/*这里我想将&DD.的值转换为5*/
quit;
*因为y列是文本格式,并且我想保留全局变量不重新对&DD.赋值,请问有办法转换吗?
我想是的如果&DD.的值转换为数值型,DD结果为5,那么这个条件语句Where y='&DD.'就可以成立;即不影响全局变量,也可以使用。
或者有没其他的方法对宏定义的变量转换类型?
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2012-5-10 11:14:57
给你个例子.
data work.a;
        input name $ y;
        datalines;
a 1
b 2
c 3
d 4
e 5
;

%let DD=05;
proc sql;
        create table work.b as
                select * from work.a
                where y=input("&DD",8.);
quit;
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-5-11 19:33:00
chendonghui1987 发表于 2012-5-10 11:14
给你个例子.
data work.a;
        input name $ y;
Y列是文本格式,不是数值型,会报错.ERROR:用等于(=)的表达式具有不同数据类型的组件。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-5-11 21:22:56
把楼上的改一下,就可以了,用%eval
proc sql;
         create table work.b as
                select * from work.a
                 where y=%eval(&dd);
quit;
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-5-12 04:13:00
both methods work fine. thanks.
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-5-13 15:59:29
00810112 发表于 2012-5-11 21:22
把楼上的改一下,就可以了,用%eval
proc sql;
         create table work.b as
一样的问题,楼上的没将Y例定义文本格式;
我想了种方法的,利用%eval;
data work.a;
        input name $ y$;
        datalines;
a 1
b 2
c 3
d 4
e 5
;
Run;

%let DD=05;
%let i=%eval(&DD.*1);/*%eval是宏计算函数,通过运算转换定义的宏变量*/
proc sql;
         create table b_&DD. as
                select * from work.a
                 where y="&i.";/*要正确引用宏变量的值,这里必须用""而不是'',因为宏处理器只能在双引号中进行替代*/
quit;
我是通过这样的方法进行转换,麻烦就在要重新赋值宏变量;
査了不少书,发现宏很强大;不知道你们有没其他更简单的方法呢?
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群