全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
8204 9
2012-10-10
data test;
a=200;
b='abc';
b=a;
run;
proc print data=test;
run;
结果a 和 b 都为200

data test;
a=200;
b='abc';
a=b;
run;
proc print data=test;
run;
结果a 是缺失值 b 为 'abc'

如何理解以上变量类型的转换?
二维码

扫码加我 拉你入群

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

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

全部回复
2012-10-10 10:22:02
我没有试。不过我想我说的应该是对的。我猜想在第一个数据里,b还是字符串-符合初定义,值为“200”-数字可以任意转化成字符串(b=a=200="200"),只是可能在log里留下类似转换的信息而已。在第二个问题里,‘abc’ 转化成数字时造成缺失。所以,一旦被定义,应该不存在类型的重新定义的问题。这里的“200”很可能些夹杂空格之类的。京剧
二维码

扫码加我 拉你入群

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

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

2012-10-10 10:39:30
jingju11 发表于 2012-10-10 10:22
我没有试。不过我想我说的应该是对的。我猜想在第一个数据里,b还是字符串-符合初定义,值为“200”-数字可 ...
data test;
a=200;
b='abc';
b=a;
c=a+b;
run;
proc print data=test;
run;

                                          The SAS System      10:19 , October 10, 2012

                                     Obs     a      b      c

                                      1     200    200    400

二维码

扫码加我 拉你入群

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

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

2012-10-10 10:43:52
am i wrong?
b is 3-letter long, character. c is numeric. the print cannot tell anything here. you can look at b's type
二维码

扫码加我 拉你入群

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

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

2012-10-10 10:57:34
jingju11 发表于 2012-10-10 10:43
am i wrong?
b is 3-letter long, character. c is numeric. the print cannot tell anything here. you c ...
You are right!

当数值赋值给字符型变量时,会发生自动类型转换,而且字符型变量的长度也会作为一个考虑因素,即SAS会尽可能准确的吧数值转化为字符的形式。

25   data test;
26   a=2020;
27   b='abc';
28   b=a;
29   c=a+b;
30   put a= b= c=;
31   run;

NOTE: Numeric values have been converted to character values at the places given by: (Line):(Column).
      28:3
NOTE: Character values have been converted to numeric values at the places given by: (Line):(Column).
      29:5
a=2020 b=2E3 c=4020
NOTE: The data set WORK.TEST has 1 observations and 3 variables.
NOTE: DATA statement used (Total process time):
二维码

扫码加我 拉你入群

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

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

2012-10-10 14:05:33
Ha ha, interesting.

251  data test;
252  a=2001;
253  b='200';
254  c=a+b;
255  d=a||b;
256  e=b+d;
257  put a= b= c= d= e= ;
258  b=a;
259  a=b;
260  c=a+b;
261  d=a||b;
262  e=b+d;
263  put a= b= c= d= e= ;
264  run;
NOTE: Character values have been converted to numeric values at the places given by:
      (Line):(Column).
      254:5   256:3   256:5   259:3   260:5   262:3   262:5
NOTE: Numeric values have been converted to character values at the places given by:
      (Line):(Column).
      255:3   258:3   261:3
a=2001 b=200 c=2201 d=2001200 e=2001400
a=2000 b=2E3 c=4000 d=20002E3 e=20004000
NOTE: Numeric values have been converted to character values at the places given by:
      (Line):(Column).
      215:3   218:3   220:3
a=1001 b=200 c=1201 d=1001200 e=1001400
a=1001 b=1E3 c=2001 d=10011E3 e=10012000
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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