楼主: wlfjhh
2001 6

[程序分享] 定义宏变量,data步和sql的结果为什么不一样 [推广有奖]

  • 0关注
  • 0粉丝

博士生

11%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
4.5000
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
367 点
帖子
61
精华
0
在线时间
372 小时
注册时间
2010-6-12
最后登录
2024-11-11

楼主
wlfjhh 发表于 2017-6-27 13:15:52 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币

data a;

x=140930378.79;

run;


/*sql创建*/

proc sql noprint;

select x into:d from a;

quit;

%put &d;

/*结果是1.4093E8*/



data _null_;

set a;

call symput('x',x);


run;

%put &x;

/*结果是140930378.79*/



(1)为什么会不一样

(2)有什么办法使sql的结果不出现科学计数法,不然后面运算一定会有问题


二维码

扫码加我 拉你入群

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

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

关键词:data步 Data sql proc sql Select

沙发
sqlai 发表于 2017-6-27 13:29:18 来自手机
1 直接用%let 赋值好了呀。

2 因为你在数据步没有定义数值型格式。一个是用字符型格式

3 试着用format定义一个12.3之类的数值格式,效果就出来了(待确认)

藤椅
孤单的我们 发表于 2017-6-27 13:46:34
sql中,select语句赋值宏变量时,以x的length=8生成了宏变量d(长度为8),由于长度不够,以best.格式存储

data步中,call symput('x',x); x先以best12.的格式从数值转换为字符,再写入宏变量x

用%put %length(&d);%put %length(&x);可以看到2个宏变量的长度不一样。

板凳
wlfjhh 发表于 2017-6-27 13:52:48
孤单的我们 发表于 2017-6-27 13:46
sql中,select语句赋值宏变量时,以x的length=8生成了宏变量d(长度为8),由于长度不够,以best.格式存储

...
sql里面用什么办法可以解决呢。因为找一个变量的max值,sql比data更效率,例如下面的语句。如果sql一直这样,我就恶心了。有没有什么好办法
proc sql noprint;
select max(x) into:maxx from test;
quit;

报纸
孤单的我们 发表于 2017-6-27 13:55:10
wlfjhh 发表于 2017-6-27 13:52
sql里面用什么办法可以解决呢。因为找一个变量的max值,sql比data更效率,例如下面的语句。如果sql一直这 ...
select put(max(x),best12.) into:maxx from test;

地板
wlfjhh 发表于 2017-6-27 13:58:20
孤单的我们 发表于 2017-6-27 13:55
select put(max(x),best12.) into:maxx from test;
良师!!!!

7
skywaterhbb 发表于 2017-6-27 16:55:40
厉害啦!

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

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