罗马数字的戏法

2017-04-03 司海涛 爬虫俱乐部 爬虫俱乐部

哈喽,诸君安。笔者在查找有关正则表达式的命令时,发现了几个有趣的命令,有关于罗马数字、阿拉伯数字以及十进位数字之间的转换,今天小编就给大家介绍一下这几个命令。

罗马数字转十进位数字-fromroman

1.fromroman命令语法结构如下:

fromroman romanvar [if] [in], generate(numvar) [re(regex)]

其中,romanvar是含有罗马数字的变量;gen(numvar)表示生成一个名称为numvar的十进位数字变量;[re(regex)]为正则表达式选项,说明fromroman可以结合正则表达式使用。

2.罗马数字介绍:

(1)相同的数字连写、所表示的数等于这些数字相加得到的数、如:Ⅲ=3;

(2)小的数字在大的数字的右边、所表示的数等于这些数字相加得到的数、 如:Ⅷ=8、Ⅻ=12;

(3)小的数字(限于 I、X 和 C)在大的数字的左边、所表示的数等于大数减小数得到的数、如:Ⅳ=4、Ⅸ=9;

(4)正常使用时、连写的数字重复不得超过三次;

(5)在一个数的上面画一条横线、表示这个数扩大 1000 倍。

3.例子说明:

我们手动输入几个罗马数字,程序如下:

clear

set more off

input str10 roman

"V I"

"V ii"

"v   iii"

"IX"

"X"

"CVI"

"CVII"

"CVIII"

"CIX"

"CX"

end

运行结果如下:

上图是列举的是10个罗马数字,下面用fromroman命令把其转换为十进位数字,程序如下:

·fromroman roman ,gen(v1)

运行结果如下:

新生成的变量v1就是罗马数字对应的十进位数。需要注意的是:

(1)使用fromroman函数,如果罗马数字中有小写字母(如第2、3行),将会把小写字母变为大写字母识别,也就是说用fromroman函数将罗马数字转为十进位数时,是不区分大小写的。

(2)用fromroman函数,会忽略所有空格。例如第1、2、3行中,罗马数字VI、VII、VIII中间有一个或多个空格,而这些空格在转换时都会被忽略掉,因此,它们并没有影响上述的转换结果。

[re(regex)]选项代表正则表达式,假如你只想把以“V”开头或者以“C”开头且以“X”结尾的罗马数字转换为十进位数字,那么这时候就得用到正则表达式了,程序如下:

·fromroman roman ,gen(v2) re(^V)

·fromroman roman ,gen(v3) re(^C.+I$)

运行结果如下:

其中,“^V”表示匹配以“V”开头的罗马数字,元字符“^”是一个位置元字符,表示匹配字符串的开头位置;“^C.+I$”表示匹配以“C”开头且以“X”结尾的罗马数字,元字符“$”也是一个位置元字符,表示匹配字符串的结尾位置,“.+”表示一个多多个任意字符串。

十进位数转罗马数字-toroman

1.toroman命令语法结构如下:

toroman numvar [if] [in], generate(romanvar) [lower]

其中,numvar是含有十进位数的变量;gen(romanvar)表示生成一个名称为romanvar的罗马数字的变量; [lower]是将大写罗马数字改为小写。

2.例子说明:

我们输入十进位数字1-10,然后用toroman函数将其转换为罗马数字,程序如下:

clear

set more off

input num

1

2

3

4

5

6

7

8

9

10

end

toroman num ,gen(roman1)

toroman num ,gen(roman2) lower

运行结果如下:

通过toroman命令,我们将十进位数转换为了罗马数字(对应变量roman1、roman2),这里需要注意

(1)加上lower之后,所有的罗马数字都将变为小写;

(2)负数、0、小数是不能被转为罗马数字的。

罗马数字转为阿拉伯数字- romantoarabic

1.romantoarabic命令语法结构如下:

romantoarabic romanvar [if exp] [in range] , generate(arabicvar)

其中,romanvar是含有罗马数字的变量;gen(arabicvar)表示生成一个名称为arabicvar的阿拉伯数字(默认为十进位制,事实上romantoarbic命令和fromroman命令得到的结果是一样的,都是十进位制的阿拉伯数字)的变量。

2.例子说明:

我们依然手动输入10个罗马数字,然后用romantoarabic命令将其转为阿拉伯数字。

程序如下:

·romantoarabic roman ,gen(arabicvar) 

显然,romantoarabic命令在转换时也是不区分大小写的。


以上就是今天给大家分享的内容了,说得好就赏个铜板呗!有钱的捧个钱场,有人的捧个人场~。

应广大粉丝要求,爬虫俱乐部的推文公众号打赏功能可以开发票啦,累计打赏超过1000元我们即可给您开具发票,发票类别为“咨询费”。用心做事,只为做您更贴心的小爬虫。第一批发票已经寄到各位小主的手中,大家快来给小爬虫打赏呀~

文字编辑:徐苾雯

技术总编:刘贝贝



往期推文推荐:

1.中国高校财经、管理与综合类期刊灌水排行榜

2.关于RTF你不知道的命令

3.关于RTF你不知道的命令之番外篇

4.免费事件研究,一片片从邮局寄来

5.免费的股价同步性,一片片从邮局寄来

6.Stata叫你回家听音乐了!

7.一言不合就用stata写邮件(Outlook/Foxmail)

8.听说你想知道怎么用stata画地图?

9.I have a Stata, I have a python

10.I have a Stata, I have a Python之二——pdf转word




关于我们

微信公众号“爬虫俱乐部”分享实用的stata命令,欢迎转载、打赏。爬虫俱乐部是由李春涛教授领导下的研究生及本科生组成的大数据分析和数据挖掘团队。

此外,欢迎大家踊跃投稿,介绍一些关于stata的数据处理和分析技巧。

投稿邮箱:statatraining@163.com

投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿”+“推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到关于stata分析数据的问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。

欢迎关注爬虫俱乐部

微信扫一扫
关注该公众号