楼主: hamsik11
2378 15

[原创博文] 关于sas编程的一点疑惑 [推广有奖]

  • 0关注
  • 3粉丝

已卖:51份资源

副教授

16%

还不是VIP/贵宾

-

威望
0
论坛币
9016 个
通用积分
1.0000
学术水平
5 点
热心指数
8 点
信用等级
4 点
经验
24079 点
帖子
404
精华
0
在线时间
569 小时
注册时间
2011-3-22
最后登录
2025-11-28

楼主
hamsik11 发表于 2011-4-29 22:08:04 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
譬如这样一段程序
data test;
store="susan ' s home";
call symput('s', store);
run;


这样一段程序为什么不直接给s赋值 而是先赋值给store,然后通过call symput来给s赋值哪?? 这样做有什么好处?
二维码

扫码加我 拉你入群

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

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

关键词:SAS编程 symput Store Susan call store 程序

沙发
李金玲 发表于 2011-4-29 23:00:39
这是创建宏变量,作为和别的的data step or macro 的接口!
李经纶

藤椅
qiuya 发表于 2011-4-30 07:12:48
hamsik11 发表于 2011-4-29 22:08
譬如这样一段程序
data test;
store="susan ' s home";
call symput('s', store);
run;


这样一段程序为什么不直接给s赋值 而是先赋值给store,然后通过call symput来给s赋值哪?? 这样做有什么好处?
具体一点说 就是,使用call symput可以给一个variable赋值, 变成macro variable, 这个指事character型
如果你在后面使用
%put &s

系统返还给你的结果就是 : susan`s home
已有 1 人评分热心指数 收起 理由
crackman + 1 鼓励积极发帖讨论

总评分: 热心指数 + 1   查看全部评分

板凳
zkymath 在职认证  发表于 2011-5-2 01:29:28
就是尚有他用,虽然我不懂 宏变量

报纸
ljliu 发表于 2011-5-6 17:41:58
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽

地板
sas_user 发表于 2011-5-6 23:09:45
sas在执行程序前会先编辑。宏及其变量的编辑优先于data step,如果s的值在程序执行以前就可以确定,那么就可以直接定义s, %let s=susan ' s home
如果想要由data step运行过程中产生出一个宏变量,就需要用call symput. 否则sas编辑宏的时候data step 还没有被编辑,宏变量的值就不能被解析。具体到这个程序,直接定义就可以了,%let store=susan's home. 感谢大家给机会学习。

7
sas_user 发表于 2011-5-6 23:23:23
比如说下面的宏变量y1,y2,y3是由随机数x产生出来的,就不能直接定义而要用call symput.
data a;
        do i=1 to 3 by 1;
        x=ranuni(0);
        call symput('y'||left(i),x*2);
        end;
run;
%put _user_;

8
suzhzh 发表于 2011-5-7 10:38:09
定义成一个宏变量的用途有很多,这里又学习了.

9
zhaoping603 发表于 2011-5-10 17:12:31
7# sas_user
你好,我不理解call symput('y'||left(i),x*2); 这句中SYMPUT括号里边的意思,请帮我解释一下。以前也见过这个,但一直不懂。趁机会麻烦你给予指点。
非常感谢。

10
soporaeternus 发表于 2011-5-10 17:24:31
楼上,我猜想是将第i行的2x赋值给宏变量&yi吧
Let them be hard, but never unjust

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-2 22:57