楼主: dxystata
883 13

[问答] SAS中如何计算字符变量含有多少个汉字 [推广有奖]

版主

大师

34%

还不是VIP/贵宾

-

TA的文库  其他...

Software

中英文Ebook

R学习

威望
2
论坛币
182307 个
通用积分
15205.2831
学术水平
208 点
热心指数
271 点
信用等级
174 点
经验
290922 点
帖子
5369
精华
1
在线时间
13475 小时
注册时间
2006-6-21
最后登录
2024-4-24

初级学术勋章 初级热心勋章 中级热心勋章 初级信用勋章

15论坛币
SAS中如何计算字符变量含有多少个汉字、多少个大写字母 多少个小写字母 多少个阿拉伯数字?谢谢!




关键词:字符变量 阿拉伯数字 阿拉伯
沙发
freyabc 发表于 2023-2-28 15:08:47 |只看作者 |坛友微信交流群
可以采用compress和length函数结合,使用compress将字符串中想要的字符类型提取出来,后用length对字符长度进行计数即可

使用道具

藤椅
dxystata 发表于 2023-3-7 14:46:56 |只看作者 |坛友微信交流群
freyabc 发表于 2023-2-28 15:08
可以采用compress和length函数结合,使用compress将字符串中想要的字符类型提取出来,后用length对字符长度 ...
谢谢   

使用道具

板凳
dxystata 发表于 2023-5-15 10:09:57 |只看作者 |坛友微信交流群
freyabc 发表于 2023-2-28 15:08
可以采用compress和length函数结合,使用compress将字符串中想要的字符类型提取出来,后用length对字符长度 ...
能否举个例子

使用道具

报纸
hugebear 发表于 2023-5-18 08:50:35 |只看作者 |坛友微信交流群
假设你的字符串只有汉字,大写英文字母,小写英文字母,数字,空格5种类型,那么可以利用compress, countc与kcountc函数求解如下:

  1. data test;
  2.       string = "英格兰Chelsea FC Club 1905"; /* 源字符串 */
  3.       chs_string = compress(string, , 'uld');
  4.       num_up = countc(string, , 'u');
  5.       num_low = countc(string, , 'l');
  6.       num_digit = countc(string, , 'd');
  7.       num_chs = kcountc(chs_string, , 'g');
  8. run;
复制代码


在上面例子的所有字符串函数中,我们都用到了'modifier'变量来指定具体的字符类型。具体来说:
  • 'u'限定字符类型为大写字母
  • 'l'限定字符类型为小写字母
  • 'd'限定字符类型为数字
  • 'g'限定字符类型为graphic,在这里用来代表汉字


更具体的函数用法请参考帮助文件。
已有 2 人评分经验 论坛币 学术水平 热心指数 收起 理由
dxystata + 100 + 1 热心帮助其他会员
whymath + 36 + 4 精彩帖子

总评分: 经验 + 100  论坛币 + 36  学术水平 + 4  热心指数 + 1   查看全部评分

使用道具

地板
whymath 发表于 2023-5-18 10:56:09 |只看作者 |坛友微信交流群
hugebear 发表于 2023-5-18 08:50
假设你的字符串只有汉字,大写英文字母,小写英文字母,数字,空格5种类型,那么可以利用compress, countc与 ...
你的程序运行后,出现警告信息:WARNING: 在对 COMPRESS 函数或例程的调用中,修饰符“B”无效。

另外,你的程序表现似乎对 SAS 会话的编码敏感,你是否需要指定会话的编码?
你的程序在中文编码的SAS会话中结果为:

1.png

你的程序在 Unicode 支持的SAS会话中结果为:
2.png
SASUSER

使用道具

7
hugebear 发表于 2023-5-18 19:38:18 |只看作者 |坛友微信交流群
whymath 发表于 2023-5-18 10:56
你的程序运行后,出现警告信息:WARNING: 在对 COMPRESS 函数或例程的调用中,修饰符“B”无效。

另外 ...
原来程序的最后一行有一个typo, 应该是
  1. num_chs = kcountc(chs_string, , 'g')
复制代码
。 另外我确实是在Unicode支持的SAS会话下运行的,结果是正确的(num_chs = 3)。

使用道具

8
hugebear 发表于 2023-5-18 21:00:26 |只看作者 |坛友微信交流群
whymath 发表于 2023-5-18 10:56
你的程序运行后,出现警告信息:WARNING: 在对 COMPRESS 函数或例程的调用中,修饰符“B”无效。

另外 ...
compress函数中的修饰符'b'也可以去掉。不影响结果。

使用道具

9
dxystata 发表于 2023-5-19 23:46:24 |只看作者 |坛友微信交流群
hugebear 发表于 2023-5-18 19:38
原来程序的最后一行有一个typo, 应该是。 另外我确实是在Unicode支持的SAS会话下运行的,结果是正确的(nu ...
中文编码的SAS如何实现呢?谢谢!

使用道具

10
dxystata 发表于 2023-5-19 23:47:13 |只看作者 |坛友微信交流群
whymath 发表于 2023-5-18 10:56
你的程序运行后,出现警告信息:WARNING: 在对 COMPRESS 函数或例程的调用中,修饰符“B”无效。

另外 ...
修饰符“B”没有出现啊,能否截个图看一下,谢谢!

使用道具

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

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

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

GMT+8, 2024-4-24 09:29