0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

SAS:length,klength,substr,ksubstr,ksubstrb的区别

冬至子 来源:小高的SAS学习笔记 作者:小高笔记 2023-05-19 11:28 次阅读

我们经常会看到Klength,Ksubstr,以及Kscan等一系列的函数,由此会产生疑惑,加K和不加K两者之间有什么区别和联系。当我们在做项目的时候发现有时候不加K也能实现我们想要得到的结果,但是有时候则会出现乱码的情况,尝试加上K后就可以完美规避掉乱码这个问题,为什么会出现这样的问题呢?本文告诉你答案。

原来加K是以字符为基础进行处理,也就是你数字符串中有几个字符就是几个字符,而不加K是以字节为基础进行处理。我们知道在SAS中文简体中一个汉字(标点)占两个字节,一个数字占一个字节;在SAS UTF-8中一个汉字(标点)占三个字节,数字占一个字节,但是SAS 英文版字符和数字都占一个字节,所以在此环境下Klength和Length、Substr和Ksubstr的功能是一样的,下面我举三个例子,以UTF-8为例:

一、klength和length

例1:计算test数据集中topic这个字符变量的长度

data test;

input topic $20.;

   cards;

话题Topic 1

话题Topic 2

话题Topic 3

话题Topic 4

话题Topic 5

;

run;

data all1;

set test;

   topic1=klength(topic);

   topic2=length(topic);

run;

结果如下:

图片

可以看到,由于中文字符在utf-8编码时为3个字节, 而length函数计算的是字节长度,会把一个汉字当成3个长度,数字当做1个长度,所以计算结果为2*3+7=13。而klength函数会忽略全角半角,统一把汉字和数字都当做1个长度,所以计算结果为9。

二、ksubstr和substr

例2:提取test数据集中topic中前六位的值

data all2;

set test;

   topic1=substr(topic,1,6);

   topic2=ksubstr(topic,1,6);

run;

结果如下:

图片

可以看到,substr提取出的字符串为“话题”, 而ksubstr提取出了前六个字符”话题Topi”,所以还是和上面的例子是一个道理,以K开头的是以字符为基础提取字符串,而不以K开头的以字节为基础提取,但是有时我们会遇到用substr提取出的字符串出现乱码的情况,出现这种情况后要怎样解决呢,看下面一个例子。

三、substr和ksubstrb

例3:提取test数据集中topic中前5位的字符串

data all3;

set test;

   topic1=substr(topic,1,5);

   topic2=ksubstr(topic,1,5);

   topic3=ksubstrb(topic,1,5);

run;

结果如下:

图片

可以看到,用substr提取出的字符串出现了乱码,这是因为substr函数提取字符时是按字节来提取的,中文字符在utf-8编码时为3个字节,所以提取指定长度的字符串时如果截断了汉字,那么返回的结果显示出来便会出现乱码。此时用ksubstrb函数就可以避免出现乱码的情况,它会舍弃最后一个不完整字符,从而保证不会出现显示上的乱码。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 字符串
    +关注

    关注

    1

    文章

    552

    浏览量

    20147
  • SAS
    SAS
    +关注

    关注

    2

    文章

    516

    浏览量

    32656
  • UTF-8
    +关注

    关注

    0

    文章

    13

    浏览量

    7817
收藏 人收藏

    评论

    相关推荐

    #硬声创作季 云计算基础入门:12-scsi及sas接口-sas和sata区别

    SATA云计算SCSISAS
    Mr_haohao
    发布于 :2022年10月16日 01:17:21

    SAS走进企业级存储应用

    SAS走进企业级存储应用串行SCSI(SAS)的出现已经有几年了。2005年,在主要的接口技术中,由于OEM服务器制造商和系统集成商开始提供串行SCSI解决方案,企业级存储市场将会显现革命性的进展
    发表于 11-13 21:58

    串行连接SCSI(SAS)技术开辟宽数据路径

      串行连接SCSI(SAS)技术开辟宽数据路径直到不久前,数据中心主要安装着使用光纤通道连接技术和并行SCSI接口的存储区域网。这类存储解决方案提供了高性能和可靠性,但费用高昂
    发表于 11-13 21:59

    SAS分区规范为所有SAS物理结构提供灵活高效的接入控制,其特性包括

    接入控制分区以将共享网络资源划分为不同的工作组 安全策略以限制不同组之间的访问 扩展器开关单点配置以及策略管理 后向兼容,并对现有SAS控制器、主机总线以及磁盘驱动器阵列的操作是透明的。PM8399
    发表于 06-02 09:31

    AD中signal length和routed length中有什么区别

    求解AD中signal length和routed length中有什么区别,感觉routed length是 代表走线长度的意思,那么signal
    发表于 05-18 14:55

    12Gbps 4通道SAS-3链路扩展器含设计文件

    描述此参考设计使用可配置的均衡、去加重和输出电压来扩大高速 SAS-3 数据路径的链路距离和损耗预算。它通过 miniSAS-HD 接口支持从 1.5 Gbps 到 12 Gbps 的 SAS
    发表于 12-19 14:23

    SAS固态硬盘存储技术

    SAS固态硬盘存储技术是一种介于传统硬盘和内存之间的存储技术,在IOPS上,相比普通机械硬盘的存储速度快50到1000倍,能在一毫秒以内的时间里对任何位置的存储单元完成快速输入/输出操作。 随着
    发表于 06-18 05:00

    SAS硬盘有什么特点?

    SCSI协议由于其深受信赖的可靠性和稳定的功能集,20年来一直牢牢占据市场。3年前才推出的串行连接SCSI(SAS)延续了对SCSI的创新,具有全新水平的可扩展性、灵活性和经济有效性,为用户提供接入、数据传输和数据存储能力。
    发表于 09-24 09:01

    Altium中Signal length和Routed length区别

    在使用Altium Designer画PCB时,等长布线后,使用快捷键R+L检测布线长度时,发现布的线长不一致,在PCB的nets里查看长度时看到了Signal length和Routed length;如下图所示:(图文详解见附件)
    发表于 10-18 11:16

    PCIExpress SATA和SAS设计验证的简化

    Simplify the validation of your PCI Express®, SATA and SAS designs with the first full-capability protocol viewer built into a digital oscilloscope
    发表于 11-05 14:07

    SAS接口的设计

     SAS是新一代的SCSI技术,和现在流行的Serial ATA(SATA)硬盘相同,都是采用串行技术以获得更高的传输速度,并通过缩短连结线改善内部空间等。SAS是并行SCSI接口之后开发出的全新
    发表于 09-09 06:26

    请问什么是SAS硬盘?具有哪些特点?

    请问什么是SAS硬盘?具有哪些特点?
    发表于 11-04 06:09

    SAS35X24R SAS EXPANDER 使用24端口扩展器提供灵活且经济高效的SAS和SATA存储解决方案

    电子发烧友网为你提供Broadcom(ti)SAS35X24R SAS EXPANDER相关产品参数、数据手册,更有SAS35X24R SAS EXPANDER的引脚图、接线图、封装手
    发表于 07-04 13:18
    <b class='flag-5'>SAS</b>35X24R <b class='flag-5'>SAS</b> EXPANDER 使用24端口扩展器提供灵活且经济高效的<b class='flag-5'>SAS</b>和SATA存储解决方案

    SAS3X24R SAS EXPANDER 使用24端口扩展器实现经济高效的SAS和SATA存储解决方案

    电子发烧友网为你提供Broadcom(ti)SAS3X24R SAS EXPANDER相关产品参数、数据手册,更有SAS3X24R SAS EXPANDER的引脚图、接线图、封装手册、
    发表于 07-04 12:51
    <b class='flag-5'>SAS</b>3X24R <b class='flag-5'>SAS</b> EXPANDER 使用24端口扩展器实现经济高效的<b class='flag-5'>SAS</b>和SATA存储解决方案

    oracle中substr函数用法

    在Oracle数据库中,SUBSTR函数用于从字符串中提取子字符串。它的语法如下: SUBSTR(string, start_position, [length]) 其中,string是要从
    的头像 发表于 12-05 16:57 491次阅读