楼主: kittyforever
25421 6

[程序分享] SAS 定义宏的三种用法 [推广有奖]

  • 11关注
  • 2粉丝

已卖:938份资源

硕士生

65%

还不是VIP/贵宾

-

威望
0
论坛币
1990 个
通用积分
5.2275
学术水平
14 点
热心指数
11 点
信用等级
7 点
经验
7819 点
帖子
203
精华
0
在线时间
124 小时
注册时间
2009-11-14
最后登录
2022-8-8

楼主
kittyforever 发表于 2013-1-9 14:42:33 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
SAS 中定义宏变量方法主要有以下三种:
   一、%LET定义
       这是最常用的方法。语法过程为:%let 宏变量名=值;调用宏变量:&宏变量名
       Tips:

       1、以逗号作为宏变量定义的结束。

       2、在定义时候不要加引号,系统会把引号当作宏变量的值之一。

       3、宏变量的作用域分为全局与局部。

           一种在程序(这里一般是指一个宏程序)外定义,则在整个SAS任何地方都可以被调用。

           另外一种则是在程序内部,则作用在该程序出现宏变量后面,在程序外则不可以被调用,否则

           会出错。(如果一个程序内部定义有宏变量变成全局变量,则需要使用%global)

       4、当宏变量一个表达式,使用:%str()
                    %let print=%str(proc print; run;);

       5、如果宏变量是数值计算表达式,则需要根据数值类型使用二个不同的宏变量:

                          %eval_r()   用于计算整数例如:%eval_r(1+2)

                         %sysevalf() 用于计算浮点数或者空值例如: %eval_r(1.0+2.3)
     二、data步中定义 call symput()
         这个方法只允许在data步中,这个一定需要注意
         语法过程:call symput("宏变量名",值);
               在DATA过程中,宏变量可以包括常值、变量值。或者函数赋予宏变量。
          三、 SQL过程中定义
              在使用SQL过程中定义宏变量,语法过程为:
             SELECT 宏值
              INTO :宏变量名
              SEPARATED BY ‘分隔符号’
            使用一个案例过程说明,以后我们再详细介绍其中的一个技巧:

data test;
input var @@;
datalines;
1 2 3 4 5
;
run;
proc sql noprint ;
select var into :macro_var
separated by ' '
from test;
quit;
二维码

扫码加我 拉你入群

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

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

关键词:separate proc sql symput Select Global 程序

已有 2 人评分经验 论坛币 学术水平 收起 理由
我的素质低 + 100 + 10 + 5 精彩帖子
李会超 + 20 + 1 精彩帖子

总评分: 经验 + 120  论坛币 + 10  学术水平 + 6   查看全部评分

沙发
wangfengxi 发表于 2013-1-9 15:38:22
学习,总结得很好,很用心啊

藤椅
chinaeu 发表于 2013-10-10 00:15:59
学习了

板凳
sqzxxyy 发表于 2016-5-23 10:58:03
get!

报纸
bluehaiku 发表于 2016-7-30 18:14:58
其实在宏中,如果使用%do 等宏函数,%do i= 1 %to 6;这样的语句时,便令i也会默认为宏变量的啦

地板
王贴贴123456 在职认证  发表于 2017-2-28 20:51:16
非常好,赞

7
TDDHA 发表于 2017-10-16 16:01:31

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-31 02:56