Stata:复合双引号在编程中的应用

发布时间:2021-12-10 阅读 308

Stata连享会   主页 || 视频 || 推文 || 知乎 || Bilibili 站

温馨提示: 定期 清理浏览器缓存,可以获得最佳浏览体验。

New! lianxh 命令发布了:
随时搜索推文、Stata 资源。安装:
. ssc install lianxh
详情参见帮助文件 (有惊喜):
. help lianxh
连享会新命令:cnssc, ihelp, rdbalance, gitee, installpkg

课程详情 https://gitee.com/lianxh/Course

课程主页 https://gitee.com/lianxh/Course

⛳ Stata 系列推文:

PDF下载 - 推文合集

作者:王舒瑶 (吉林大学)
邮箱378807478@qq.com


目录


1. 简介

在开始介绍双引号和复合双引号之前,我们先来认识一下暂元的引号使用。暂元的左右引号是由键盘上不同的键打出来的。其中,左边为 Esc 下方的那个键 `。右边为 Enter 左侧的那个键 '。下面是在循环语句中常见的例子。

*给变量名统一添加后缀 tmp
sysuse auto.dta, clear
foreach var of varlist make-foreign{
  rename `var' `var'_tmp
}

双引号最常见的用法是来包裹字符串。比如说 "Yes""No""my dir\my file"。双引号的左右引号是由键盘上相同的键打出来的,即键盘 Enter 左侧的那个键 "

. webuse hbp2, clear
. des sex                 //可以看出 sex 是 string variable

Variable      Storage   Display    Value
    name         type    format    label      Variable label
---------------------------------------------------------------
sex             str6    %9s                   Sex

. count if sex == "male"  //统计 sex 为 male 的观测值个数
. label variable age_grp "age groups in 5-year increments" //给 age_group 这个变量加标签
. des age_grp

Variable      Storage   Display    Value
    name         type    format    label      Variable label
------------------------------------------------------------------------------
age_grp         byte    %8.0g      agefmt     age groups in 5-year increments

复合双引号其实可以理解为在暂元的引号 (` ') 里嵌套双引号 (" "),例如 `"compound quotes"'。关于复合双引号的更多介绍,详见连享会推文「普林斯顿Stata教程(三) - Stata编程」

2. 何时需要使用复合双引号

通常我们在遇到下列情形时会需要使用引号:显示着重论述的字符串,显示特殊字符串,表示引用的字符串。关于引号的更多介绍,详见「引号的用法及举例」。当引号里面还有引号时,对于外面的那层引号,我们就需要使用复合双引号,从而让 Stata 更清晰地得知我们赋予它命令的意义。

首先,我们来看使用复合双引号来保护着重论述的字符串。例如,我们想让 Stata 显示 The hopefully "final" run 这句话。但像下面这样输入命令的话,Stata 会报错。

. display "The hopefully "final" run"
The hopefully final" run" invalid name

Stata 理解的是 "The hopefully" final "run"。因为 final 左右两个引号并没有把这个单词包围起来,故在 Stata 看来是一句无效表达。Stata 的复合双引号可以解决这个问题。

由于打开关闭符号不同,这些引号可以嵌套。复合引号可以在任何使用双引号的地方使用。如果引用的文本包含双引号,则必须使用复合引号。我们回到上面那个例子,按照下面这样输入就可以正常显示了。

. display `"The hopefully "final" run"'
The hopefully "final" run

接着,我们使用复合双引号来保护特殊字符串。例如,Stata 论坛有这样一个问题:数据是字符串,里面既包括空格又包括双引号,如何写一个命令,搜索出所有包含 Today is "Sunday" 这个字符串的观测值?关于该问题的讨论,详见「Loop with spaces and quotes」

. clear all
. set more off
. local expression `"`"Today is "Sunday""'"'  //把 Today is "Sunday" 存入 expression 暂元
. set obs 1  
. gen text= `"Today is "Sunday" and tomorrow is "Monday""' 
. gen flag=0
. set trace on   //Stata 程序语言, 追踪项目的 debug 进程
. foreach term in `expression'{
  2.   replace flag=1 if strpos(text, `"`term'"') > 0
  3. } 
. tab flag

       flag |      Freq.     Percent        Cum.
------------+-----------------------------------
          1 |          1      100.00      100.00
------------+-----------------------------------
      Total |          1      100.00

最后,我们使用复合双引号来保护自带双引号的暂元。例如,暂元 answ 自带一些引号标识的时候,复合双引号使用起来会更有效。假设 answ 包含了字符串 I "think" so

. local answ `"I "think" so"'
. dis "`answ'" //Stata 会自动把它扩展成为 "I "think" so"
I think" so" invalid name

相比较下,Stata可以更好的识别如下语句:

. local answ `"I "think" so"'
. dis `"`answ'"' //Stata 会自动把它扩展成为 `"I "think" so"'
I "think" so

最后,大家可以试试下面两个命令输出的不同结果。

. display `"test"'
test

. display `""test""'
"test"

3. 相关推文

Note:产生如下推文列表的 Stata 命令为:
lianxh 暂元 编程, m
安装最新版 lianxh 命令:
ssc install lianxh, replace

相关课程

免费公开课

最新课程-直播课

专题 嘉宾 直播/回看视频
最新专题 文本分析、机器学习、效率专题、生存分析等
研究设计 连玉君 我的特斯拉-实证研究设计-幻灯片-
面板模型 连玉君 动态面板模型-幻灯片-
面板模型 连玉君 直击面板数据模型 [免费公开课,2小时]
  • Note: 部分课程的资料,PPT 等可以前往 连享会-直播课 主页查看,下载。

课程主页

课程主页

关于我们

  • Stata连享会 由中山大学连玉君老师团队创办,定期分享实证分析经验。
  • 连享会-主页知乎专栏,700+ 推文,实证分析不再抓狂。直播间 有很多视频课程,可以随时观看。
  • 公众号关键词搜索/回复 功能已经上线。大家可以在公众号左下角点击键盘图标,输入简要关键词,以便快速呈现历史推文,获取工具软件和数据下载。常见关键词:课程, 直播, 视频, 客服, 模型设定, 研究设计, stata, plus, 绘图, 编程, 面板, 论文重现, 可视化, RDD, DID, PSM, 合成控制法

连享会小程序:扫一扫,看推文,看视频……

扫码加入连享会微信群,提问交流更方便

✏ 连享会-常见问题解答:
https://gitee.com/lianxh/Course/wikis

New! lianxhsongbl 命令发布了:
随时搜索连享会推文、Stata 资源,安装命令如下:
. ssc install lianxh
使用详情参见帮助文件 (有惊喜):
. help lianxh