楼主: 王贴贴123456
9463 6

[程序分享] compress scan字符型函数 [推广有奖]

  • 10关注
  • 5粉丝

博士生

49%

还不是VIP/贵宾

-

威望
0
论坛币
146 个
通用积分
5.3500
学术水平
0 点
热心指数
4 点
信用等级
0 点
经验
4582 点
帖子
151
精华
0
在线时间
357 小时
注册时间
2012-9-24
最后登录
2021-7-5

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
小白求解
有关常用字符型函数问题:
1、compress 函数有几个参数,我认为只有两个,第一个代表哪个变量,第二个参数代表去除哪些字符,那下面的代码有三个变量,其中哪个inft是什么意思?

data height;
   set learn.names_and_more(keep = Height);
   Height = compress(Height,'INFT.','i');

   Feet = input(scan(Height,1,' '),8.);
   Inches = input(scan(Height,2,' '),?? 8.);
   if missing(Inches) then HtInches = 12*Feet;
   else HtInches = 12*Feet + Inches;
   drop Feet Inches;
run;

2、scan函数,代表选取该变量的哪个单词(前提该变量有多个单词)有三个变量,请问最后一个变量为什么老是空格(看了几个例子,都是空着的,有什么含义吗?是代表单词的间隔是空格?)
scan(Height,1,' ')



二维码

扫码加我 拉你入群

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

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

关键词:compress Press scan comp COM 单词

回帖推荐

mich_ard 发表于3楼  查看完整内容

Compress函数: Compress函数的功能其实有几个,它可以有1-3个参数。分别介绍如下(你的问题 Height = compress(Height,'INFT.','i'); 在“三个参数”得到回答): 一, 1个参数[/backcolor],表示(只)去掉所有空格,包括前面,后面,中间。与其它字符无关。[/backcolor] x=' [/backcolor]Mary got married on 11-11-2011 [/backcolor]'; /*注意,句子前后都有一个空格,红色*/ y1=compress(x); 结果:M ...
沙发
l1i2n3i4n5g 在职认证  发表于 2016-11-4 23:43:50 |只看作者 |坛友微信交流群
1、INFT.指定了要从变量Height中去掉所有的i、n、f、t、.
2、以空格为界截取变量Height,也可以指定其他字符或字符串

使用道具

藤椅
mich_ard 发表于 2016-11-5 11:13:38 |只看作者 |坛友微信交流群
Compress函数

Compress函数的功能其实有几个,它可以有1-3个参数。分别介绍如下(你的问题 Height = compress(Height,'INFT.','i');  在“三个参数”得到回答):

   

一, 1个参数,表示(只)去掉所有空格,包括前面,后面,中间。与其它字符无关。


x=' Mary got married on 11-11-2011 ';           /*注意,句子前后都有一个空格,红色*/

y1=compress(x);

结果:Marygotmarriedon11-11-2011          (前,后面,中间的空格都被去掉)


二,2个参数:去掉引号内列出的任何东西,可以是字符,数值,空格。大小写敏感。


x='Mary got married on Jan. 11, 2000';

y2=compress(x, 'm10' );


结果:y2=Mary got arried on Jan. , 2                        /* m, 1, 0 被去掉 */


三,3个参数


第三个参数通常就两种:


一是用 ‘ i ’,表示第二个参数括号内字母大小写不敏感(这一点和FIND语句的‘ i ’类似);

二是用 ‘ k ’,表示第二个参数括号内提到的所有东东保留(keep),未提到的则统统去掉(仍是大小写敏感)

FIND语句也有类似的‘ k ’功能

x='Mary got married on Jan. 11, 2000';

y3_i = compress(x, 'm10' , 'i' );

y3_k = compress(x, 'm10' , 'k' );


结果:

y3_i=ary got arried on Jan. , 2

y3_k=m11000



四,仍是3个参数:既要大小写不敏感,又要使用 k 的功能,用 ‘ik’。


x='Mary got married on Jan. 11, 2000';

y4 = compress(x, 'm10' , 'ik' );


结果:y4=Mm11000


Scan函数:


Scan函数理论上也是3个参数,其一般通式为 scan(string, N, delimiters),即 “由第三个参数(delimiters分隔符)将字符串分为多个部分,第N个部分即为所求。


要注意的是Scan函数的缺省分隔符很多,包括: 空格   .   <  (  +  |  &  !  $  *  )  ;  ^  -  /  ,  %   等全是。你所提到的“空引号”就是要求以空格作为分隔符。注意的是,第三个参数不是必需的,如果缺失,表示系统将使用缺省分隔符。


举例:以斜线做分隔符:


data _test_;

date='4/8/2016';

Day=scan(date, 2, '/' );  

put Day=;

结果:Day=8


还有一点要注意的是,Scan函数的目标变量的长度。从SAS 9.4开始,已不再规定是200了,而是规定由Scan函数的第一个参数的长度决定的,如上例, date长度是8,所以Day 的长度也是 8。有人参加SAS base考试就碰到过类似的问题,按原来老版本SAS的标准答案答题,结果被判错误。题目见下:


The following SAS program is submitted:

data work.test;

Author = 'Agatha Christie';

First = substr(scan(author, 1, ' ,'), 1, 1);

run;

Which one of the following is the length of the variable FIRST in the output data set?

A. 1

B. 6

C. 15

D. 200


答案:以前是D。新答案是 C,因为 Scan函数的第一个参数Author的长度是15。


已有 1 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
prince315 + 5 + 5 + 1 + 1 + 1 热心帮助其他会员

总评分: 经验 + 5  论坛币 + 5  学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

使用道具

板凳
王贴贴123456 在职认证  发表于 2016-11-5 18:33:58 |只看作者 |坛友微信交流群
mich_ard 发表于 2016-11-5 11:13
compress 函数

compress函数的功能其实有几个,它可以有1-3个参数。
多谢,很清楚

使用道具

报纸
mich_ard 发表于 2016-12-5 03:01:52 |只看作者 |坛友微信交流群
王贴贴123456 发表于 2016-11-5 18:33
多谢,很清楚
不用谢。人人为我,我为人人,呵呵。

使用道具

您好,我想问下最后那个题,为什么选C 15.因为我认为是选A呢,因为substr第三个参数是1,选择的是1个字符长度啊,麻烦回复下,谢谢您。

使用道具

7
witchfzx 发表于 2018-11-7 13:57:59 |只看作者 |坛友微信交流群
黄旗一点兵马收0 发表于 2018-8-28 15:09
您好,我想问下最后那个题,为什么选C 15.因为我认为是选A呢,因为substr第三个参数是1,选择的是1个字符长 ...
应该问的是这个变量属性的长度,不是实际长度。比如变量属性是$100. 但是实际字符是 hello,长度是5

使用道具

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

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

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

GMT+8, 2024-4-25 12:10