楼主: dxystata
1533 13

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

版主

已卖:302份资源

大师

37%

还不是VIP/贵宾

-

TA的文库  其他...

Software

中英文Ebook

R学习

威望
2
论坛币
183395 个
通用积分
15333.1475
学术水平
208 点
热心指数
271 点
信用等级
174 点
经验
298627 点
帖子
5586
精华
1
在线时间
13632 小时
注册时间
2006-6-21
最后登录
2025-12-22

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

楼主
dxystata 发表于 2023-2-28 14:38:50 |AI写论文
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
查看我的精华帖:免费的 SAS 软件

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
拉您进交流群
GMT+8, 2025-12-29 08:01