楼主: 木叶知秋
5900 5

[学习分享] 关于变量长度和变量中空格的小结 [推广有奖]

  • 0关注
  • 2粉丝

博士生

10%

还不是VIP/贵宾

-

威望
0
论坛币
1237 个
通用积分
0.0002
学术水平
29 点
热心指数
30 点
信用等级
31 点
经验
3622 点
帖子
110
精华
0
在线时间
304 小时
注册时间
2009-3-29
最后登录
2023-9-8

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
考完Base,感觉通过做70和123题最大的收获就是对变量长度的理解。故总结出来分享一下,一点拙见,还望指正。
一、关于变量长度
1、如果没有通过length定义变量长度,则字符变量长度为第一次赋值是长度,数值变量长度默认为8,且默认以best12.格式保存
eg1:
  1. data test;
  2. name='jimmy';
  3. name='jim';
  4. num=123;
  5. run;
复制代码
name变量的长度为5,num变量的长度为8,默认输出格式best12.
2、由于数值变量默认输出格式best12.,在转换为字符变量格式的时候,会变成12位字符变量,不足12位的在前面补足空格
eg2:
  1. data test;
  2. name='jimmy';
  3. num=123;
  4. pin=name||num;
  5. run;
复制代码

拼接函数自动将num转换为字符变量,可以看出变量pin长度为17(5+12),123前面补足了9个空格。
3、如果通过length定义了字符变量的长度,则不足定义长度位数的会在后面补足空格
eg3:
  1. data test;
  2. length name $8;
  3. name=' jimmy';
  4. run;
复制代码
该例定义了变量长度为8,赋值时不足8位后面补空格(注意前面有一个空格,因此后面补了两个空格)
4、关于length函数,我们看一下帮助菜单length函数的定义:

LENGTH Function

Returns the length of a non-blank character string, excludingtrailing blanks, and returns 1 for a blank character string.
eg4:
  1. data test;
  2. name=' jimmy  ';
  3. num=  123  ;
  4. a=length(name);
  5. b=length(num);
  6. put a b;
  7. run;
复制代码
赋值时jimmy前面有一个空格,后面有两个空格,结果a=6 b=12。length函数返回的是变量去掉尾部空格后的实际字符长度。
5、关于substr\trim\scan函数,SUBSTR和TRIM不更改变量的存储长度,也是在新生成变量后面补空格,scan函数结果默认长度200。


二、一些对变量中空格发生作用的字符函数总结
1、只对首尾空格起作用字符函数

trim() 去掉字符串尾部空格,如果字符串为空,则返回一个空格

left() 把字符串开头的空格移到尾部

strip() 去掉字符串开头和结尾的所有空格

cat() 与||作用类似,保留首尾全部空格

catt() 但是连接之前会去掉各字符串尾部空格,相当于连接符结合trim()使用

cats() 但是连接之前会去掉首尾全部空格,相当于连接符结合strip()使用

catx() 但是连接之前会去掉首尾全部空格,并且在字符串之间加上一个指定的字符串
2、如果想去除字符中间空格,使用compress函数

二维码

扫码加我 拉你入群

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

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

关键词:Character compress function trailing Returns 最大的

沙发
Crsky7 发表于 2015-10-23 12:58:10 |只看作者 |坛友微信交流群
总结得真好

使用道具

藤椅
存希 发表于 2015-11-13 16:31:47 |只看作者 |坛友微信交流群
学习了

使用道具

板凳
libingrong01 发表于 2017-2-20 15:14:49 |只看作者 |坛友微信交流群
棒棒哒,谢谢楼主

使用道具

报纸
libingrong01 发表于 2017-2-20 15:18:58 |只看作者 |坛友微信交流群
谁能解释一下为什么这道关于变量长度的题答案是b?
33.The following SAS program is submitted:
data test;
input animal1 $ animal2 $
mlgrams1 mlgrams2;
cards;
hummingbird ostrich 54000.39 90800000.87
;
run;
Which one of the following represents the values of each variable in the output data set?
a. animal1 animal2 mlgrams1 mlgrams2
hummingb ostrich 54000.39 90800000
b. animal1 animal2 mlgrams1 mlgrams2
hummingb ostrich 54000.39 90800000.87
c. animal1 animal2 mlgrams1 mlgrams2
hummingbird ostrich 54000.39 90800000
d. animal1 animal2 mlgrams1 mlgrams2
SAS 认证考试样题
SAS 中文论坛网站http://www.mysas.net
SAS 中文论坛FTP 站ftp://mysas.vicp.net
hummingbird ostrich 54000.39 90800000.87
Correct answer: b
The CARDS statement is an alias for the DATALINES statement. In the INPUT
statement, you must specify a dollar sign ($) after the variable name in order to define a
character variable. If you do not specify otherwise, the default storage length for a
variable is 8. In the example above, the character value hummingbird is truncated to
hummingb.

使用道具

地板
SugarJoy 发表于 2019-4-1 20:40:13 |只看作者 |坛友微信交流群
谢谢楼主~~~~~~~~~

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-19 13:50