destring — 将字符串变量转换为数字变量,反之亦然

描述

destring 将字符串变量转换为数字变量。如果未指定 varlist ,destring 则将将数据集中的所有变量从字符串转换为数字型。ignore()中列出的字符将被删除。 varlist 中已变为数字的变量不会发生更改。destring 将空字符串 “ ” 和 “.” 视为 sysmiss (.) 并将字符串 “.a”, “.b”, ... , “.z” 解释为扩展缺失值 .a, .b, ... , .z;参阅 [U] 12.2.1 Missing values。destring 也会忽略任何前导或尾随空格,例如,“ ” 等同于“”, “ . ” 相当于“ . ”。
tostring 将 varlist 中的变量从数值型转换为字符串。并且使用最紧凑的字符串格式。如果 varlist 中已经是字符串的变量,将不会被转换。

快速入手

将 strg1 从字符串转换为数值型,并将结果放在 num1 变量中。

destring strg1, generate(num1)

同上所述,但忽略 strg1 中的%字符。

destring strg1, generate(num1) ignore(%)

As above, but return . for observations with nonnumeric characters

destring strg1, generate(num1) force

将 num2 从数值型转换字符串,并将结果放在 strg2 变量中。

tostring num2, generate(strg2)

同上所述,但格式为前导0和小数点后3位数。

tostring num2, generate(strg2) format(%09.3f)

语法

将字符串变量转换为数字变量

destring [varlist] , {generate(newvarlist)|replace} [destring_options]

将数字变量转换为字符串变量

tostring varlist , {generate(newvarlist)|replace} [tostring_options]

destring_选择项

generate(newvarlist):生成 newvar_1 ,..., newvar_k 表示 varlist中的每个变量。
replace:用数值变量替换varlist中的字符串变量。
ignore("chars" [, ignoreopts]):删除指定的非数字字符,字符或字节,以及非法的Unicode字符。
force:将非数字字符串转换为缺失值。
float:生成数值变量为 float 类型。
percent:将百分比变量转换为小数形式。
dpcomma: 将逗号作为小数转换为句点十进制格式。

tostring_选择项

generate(newvarlist) :生成 newvar_1 ,..., newvar_k 表示 varlist中的每个变量。
replace:用字符串变量替换 varlist 中的数字变量。
force: 强制转换,忽视信息丢失。
format(format) :使用指定格式转换。
usedisplayformat: 使用显示格式转换。

destring_选择项详细解释

必须指定 generate()或 replace 。 使用任一选项,如果任何字符串变量未包含使用 ignore()指定的非数字字符,则不会生成相应的变量,也不会替换该变量(除非指定了force)。
generate(newvarlist)指定为 varlist 中的每个变量创建一个新变量。 newvarlist 必须包含与 varlist 中的变量相同数量的新变量名。 如果未指定varlist,则 destring 为数据集中的每个变量生成数值变量; 然后 newvarlist 必须包含与变量中相同数量的新变量名数据集。 任何变量标签或特征都将复制到创建的新变量中。
replace 指定将 varlist 中的变量转换为数字变量。 如果未指定varlist,则 destring 尝试将所有变量从字符串转换为数值型。 并保留任何变量标签或特征。
ignore("chars" , ignoreopts ) 指定删除非数字字符。 ignoreopts 可能是aschars,asbytes 或非法的。 默认行为是将字符作为字符删除,这与指定 aschars 相同。 asbytes 指定删除 ignore 字符串中所有字符中包含的所有字节,无论这些字节是否形成完整的 Unicode 字符。 illegal指定删除所有非法 Unicode 字符,这对于删除 highASCII 字符很有用。 非法可能不会用 asbytes 指定。 如果删除了忽略字符串后,任何字符串变量仍包含任何非数字或非法 Unicode 字符,除非还指定了force,否则不会对该变量执行任何操作。 请注意,对于 Stata ,逗号是非数字字符; 另请参阅下面的 dpcomma 选项。
force 指定除了使用ignore()指定的任何字符串值之外,任何包含非数字字符的字符串值都被视为缺少数字值。
float 指定最初创建的任何新数值变量都是float类型。 默认值为double类型; 见[D] data types。 destring 尝试自动压缩每个新数字创建后的变量。
percent 删除变量值中找到的任何百分号,并将该变量的所有值除以100,将值转换为小数形式。 percent 本身意味着百分号“%”是ignore()的参数,但反之则不然。
dpcomma 指定将逗号作为十进制值的变量转换为具有十进制值的句点。

tostring_选择项详细解释

必须指定generate()或replace。如果将任何数字变量转换为字符串将导致信息丢失,除非指定force,否则不会生成任何变量。
generate(newvarlist) :指定为 varlist 中的每个变量创建一个新变量。newvarlist 必须包含与 varlist 中的变量相同数量的新变量名。 任何变量标签或特征都将复制到创建的新变量中。
replace:指定将 varlist 中的变量转换为字符串变量。 将保留任何变量标签或特征。
force: 指定强制转换即使它们导致信息丢失也是如此。 信息丢失意味着以下两种情况之一:1)real(string(varname,“format”))的结果不等于 varname; 也就是说,如果没有信息丢失,转换是不可逆的; 2)指定了 replace,但变量具有关联的值标签。在情况1中,通常最好指定 usedisplayformat 或 format()。在情况2中,在强制转换中将忽略值标签。
format(format) : 指定将数字格式用作string()函数的参数,该函数控制数值变量到字符串的转换。 例如,格式为%7.2f 指定在转换为字符串之前将数字四舍五入到小数点后两位。 无法使用usedisplayformat指定format()
usedisplayformat:指定对每个变量使用当前显示格式。例如,当使用指定了 %d 或 %t 格式的美国社会保险号或每日或其他日期时,此选项可能非常有用。无法使用format()指定usedisplayformat。

例子 1

use http://www.stata-press.com/data/r15/destring1
describe
list
destring, replace
describe
list

例子 2

我们的数据集包含变量日期,由于年份和月份之后的空格而被记录为字符串。如果我们想要删除空格。 destring会将其转换为数字并删除空格。

use http://www.stata-press.com/data/r15/destring2, clear
describe date
destring date, replace ignore(" ")
describe date
list date

例子3

我们的数据集包含变量日期,价格和百分比。 这些变量被读入 Stata作为字符串变量,因为它们包含空格,美元符号,逗号和百分号。我们想要删除所有这些字符并为包含数值的日期,价格和百分比创建新变量。 删除百分号后,我们要将百分比变量转换为十进制形式。

use http://www.stata-press.com/data/r15/destring2, clear
describe
destring date price percent, generate(date2 price2 percent2) ///
ignore("$ ,%")percent
describe
list

tostring

将数字数据转换为字符串等效项可能会有问题。与大多数软件一样,Stata 将数值数据保存为有限精度和二进制形式。 参见U] 13.12 Precision and problems therein。 如果未指定format(),则tostring 使用格式 %12.0g。 特别是,这种格式足以将保存为字节,整数或长整数的整数转换为字符串等效而不会损失精度。 但是,用户通常需要自己指定格式,特别是当数字数据具有小数部分时,由于某种原因,转换为字符串是必须的。

例子4

我们的数据集包含一个字符串月变量和数字年和日变量。我们希望将这三个变量转换为%td日期。

use http://www.stata-press.com/data/r15/tostring, clear
list
tostring year day, replace
generate date = month + "/" + day + "/" + year
generate edate = date(date, "MDY")
format edate %td
list

查看特征

每次发出 destring 或 tostring 命令时,都会在每个转换变量的特征列表中生成一个条目。 您可以键入 char list 并以查看这些特征。 在示例3之后,我们可以使用 char list 来查找 destring 命令删除了哪些字符。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,539评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,911评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,337评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,723评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,795评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,762评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,742评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,508评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,954评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,247评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,404评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,104评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,736评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,352评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,557评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,371评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,292评论 2 352

推荐阅读更多精彩内容