全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
10040 6
2016-11-04
小白求解
有关常用字符型函数问题:
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,' ')



二维码

扫码加我 拉你入群

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

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

全部回复
2016-11-4 23:43:50
1、INFT.指定了要从变量Height中去掉所有的i、n、f、t、.
2、以空格为界截取变量Height,也可以指定其他字符或字符串
二维码

扫码加我 拉你入群

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

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

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。


二维码

扫码加我 拉你入群

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

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

2016-11-5 18:33:58
mich_ard 发表于 2016-11-5 11:13
compress 函数

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

扫码加我 拉你入群

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

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

2016-12-5 03:01:52
王贴贴123456 发表于 2016-11-5 18:33
多谢,很清楚
不用谢。人人为我,我为人人,呵呵。
二维码

扫码加我 拉你入群

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

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

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

扫码加我 拉你入群

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

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

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

说点什么

分享

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