Stata 字符变量处理

本文介绍了在Stata中处理字符变量的技巧,包括保留原始数据和变量、转换日期型字符串变量、处理标识符和分类变量。对于日期型变量,讲述了如何将其转换为数值格式,如yearly date和包含日期的字符串变量。对于分类变量,提到了encode和generate命令的使用。还提醒了不要导入元数据,并推荐了最常用的destring命令来转换无法自动处理的字符变量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Stata 中经常需要对 字符变量 做处理,将 字符变量 转换为 数值变量。但 字符变量 的形式多样,包括 标识符变量/分类变量日期变量纯数字变量 等,在转换过程中需要使用不同的转换方法。尤其当字符串内容为数字时(如 日期变量纯数字变量),需要格外小心。

本篇推文将提供七个建议,涵盖多种字符串形式的处理方法,帮助大家更好的处理字符型变量。

1. 保留备份

1.1 保留原始数据

  • 保留原始 dta 数据 使用 save 命令将修改后的数据另存为新的 .dta 文件,不要直接修改替换原始数据。
  • 保留导入的原始数据 不要丢弃用于导入( import)数据的任何原始数据文件,例如文本或电子表格文件。有时,可能需要返回到源头并重新开始数据导入和处理工作。

1.2 保留原始变量

因为字符串转换很容易出错,所以在字符串操作过程中,通常生成一个新的变量来保存转换结果,而不是替换原有的字符串变量。有些命令提供 replace 选项,可以将原始变量替换为转换后的结果,但这种情况下,如果转换出错将找不到原始的字符串变量。更好的方式是使用 generate() 选项生成新的变量,如果出现错误,也可以回到原始变量,重新修改。

译者注: 需要补充说明的是,如果遵循了第一条建议,即我们的 do 文档 的首行始终是以 import xxx.txtimport xxx.xlsx 的方式导入原始 TXT 或 Excel 文档,那么可以在 dofile 中采用 replace 的方式替换到原变量,以免产生过多的新变量。后续处理过程中若需返回,则可以重新导入原始数据。

2. “日期型”字符串变量

使用 listeditbrowse 命令查看字符串变量,如果变量中包含形如 20jan2010 09:15:2220/01/20102010w32010q1 的数据,这种变量就是**“日期型”**字符串变量,通常包含以下几种类型:

日期类型 该类型的显示格式
datetime 20jan2010 09:15:22.120
(daily) date 20jan2010, 20/01/2010, ...
weekly date 2010w3
monthly date 2010m1
quarterly date 2010q1
half-yearly date 2010h1
yearly date 2010

2.1 日历年(yearly date)

如果日期型变量是以字符串保存的形如 19842018 这样的年度日期,可以直接使用 destring 命令转换为数值格式,具体见 help destring

2.2 包含日期的字符串变量

如果字符串变量包含日期或时间,需要使用日期-时间函数转换为数字格式的日期或时间变量。具体转换过程可以分为如下两个步骤: Step 1: 使用日期-时间函数 help datetime,将字符串日期转换为数字日期 Step 2: 使用 format 命令,将数字显示为想要的日期格式

2.2.1 数字日期

数字日期,可以理解为某一日期距离原点时间间隔。Stata 将 1960 年的第一个日期设为原点 0(如:日度数据的原点为 1960年1月1日;月度数据的原点为 1960 年第 1 月;周数据的原点为 1960 年第 1 周)。不同的日期类型,计算时间间隔的单位不同(如:日度数据为 间隔天数,月度数据为 间隔月数,周数据为 间隔周数)。

以日度数据为例,1776年7月4日 的数字日期是 -67019,表示 1960年1月1日 之前的第67019 天。从这里可以看出一个问题:对于字符串日期来说,含义是很直观的;但对于数字日期,含义通常比较模糊(如 67019),很难直观判断这个数字代表的是什么日期。可以通过 format 命令,将数字日期显示为日期格式,详情参见 help format

format 的语法为 format varlist %fmt,其中 varlist 为数字日期变量,%fmt 为显示的日期格式,需要与日期类型相对应(如:日度数据的日期格式为 %td)。常见的日期类型与对应的日期显示格式如下表所示:

日期格式 %fmt 日期类型 举例
%tc date/time format var
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

a useful man

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值