
New! 搜推文,找资料,用
lianxh
命令:
安装:ssc install lianxh, replace
使用:lianxh 合成控制
lianxh DID + 多期, w


⛳ Stata 系列推文:
- 全部 | Stata入门 | Stata教程 | Stata资源 | Stata命令
- 计量专题 | 论文写作 | 数据分享 | 专题课程
- 结果输出 | Stata绘图 | 数据处理 | Stata程序
- 回归分析 | 面板数据 | 交乘项-调节 | IV-GMM
- 内生性-因果推断 | 倍分法DID | 断点回归RDD | PSM-Matching | 合成控制法
- Probit-Logit | 时间序列 | 空间计量 | 分位数回归 | 生存分析 | SFA-DEA
- 文本分析-爬虫 | Python-R-Matlab | 机器学习
- Markdown | 工具软件 | 其它
作者:王萃芳 (东北财经大学)
邮箱:wcfsophia@26.com
编者按:本文主要摘译自下文,特此致谢!
Source:Asjad Naqvi, 2022, Blog, Stata and GitHub Integration. -Link-
目录
[[TOC]]
GitHub 是一个版本控制和协作的代码托管平台。无论你和同伴身处何地,它都可以让你们一起合作开发项目。此外,在 GitHub 上,人们还可以关注其他代码开发项目、访问数据集并使用一整套能够展示代码功能的语言建立交互式网站。它的一个优点是所有这些都是免费的。
鉴于 GitHub 的重要性,本文旨在介绍如何在 Stata 中使用 Git 语言来同步 GitHub 的文件。
1. GitHub 简介
打开 https://github.com/ 这个网址,第一步设置一个 GitHub 帐户。登录后,需要通过单击 +
号或 New
图标来设置新存储库。

然后进行如下填写,你可以对它进行任意的描述和定义,同时保持你的储存库是公开状态。

当点击 Create repository
后,会出现如下情形。

在这里您可以看到您的文件夹的 url,例如 https://github/<username>/<foldername>.git
。下面是一堆 git
我们需要开始的命令。如果需要,可以将这些复制到某处。在 GitHub 中我们应该创建一个 README.md
文件。事实上,如果没有这个文件,就看不到文件夹的内容。我们没有在前面的步骤中检查 README.md
选项,但我们将会在 Stata 中设置它。
2. 在桌面上设置 GitHub
虽然 GitHub 允许人们使用交互式界面来添加和修改基本内容,但有些事情不能在线完成。例如,不能在线删除文件。此外,如果您有几十个文件要在不同的文件夹中同步,那么通过拖放手动完成所有这些操作是相当麻烦的。
所以我们需要在计算机上进行本地设置,使其可以 同步或推送本地文件到在线 GitHub 文件夹。这里也可以根据要同步的文件夹在本地做一些版本控制。同步文件夹的一种方法是使用「GitHub Desktop 应用程序」。

安装并打开此程序后,你可以登录到 GitHub 帐户并复制或克隆在线存储库。如果在本地文件夹中进行任何更改,例如更改 README.md
文件,或在方案里添加新内容,可以看到下面显示旧版本和新版本的比较。完成后,可以按 Commit to main
图标。

在这里,你可以在屏幕截图中看到我更新了 README.md
文件。它展示了旧版本和新版本的比较。我还对方案文件进行了一些小修复。由于这些都是重大变化,我需要为此上传一个版本名称。完成后,我可以按 Commit to main
图标。就会出现如下情况:

现在,如果按下 Push origin
,我的文件将在 GitHub 服务器上同步。可以对在线存储库进行刷新,这里版本的名称和更改时间都显示在在线存储库中:

这是将文件从桌面同步到在线存储库的一种方式,将粘贴内容复制到本地 GitHub 桌面文件夹并同步。回到当前问题,这里的目的不是讨论 GitHub 桌面应用程序,而是展示从桌面到 GitHub 的同步,并引入一些术语。
3. 如何执行 Git 命令
Git 的核心本质是基于语法的。这意味着我们可以在 DOS shell 中输入命令,并将信息直接推送到 GitHub。要开始使用 git,我们需要安装另一个软件 Git。安装后,计算机会多三个软件:

这三个文件分别是 Git GUI、Git CMD 和 Git Bash。这里重要的是 Git 命令现在可以在 Windows shell 上使用。在这里,你可以通过单击 Git CMD 或 Git Bash 访问 shell,或者转到 Windows 搜索并键入cmd
或powershell
:

打开 PowerShell 输入 "git" 并按回车,将获得一长串可以使用的命令:

这些命令允许我们从任何软件调用 shell 并从该软件推送 git 代码。接下来,我们将会介绍如何在 Stata 中进行这些操作。
4. Stata 和 GitHub 的交互
Stata 具有调用 windows shell 的内置功能。如果我们在 Stata 中输入:
help shell
此时会出现 shell 命令的帮助文件,它显示了 Stata 如何与各种操作系统交互:

这是一个非常强大的工具,它允许人们在 Stata 环境之外创建、修改和删除文件。shell 可以通过输入 shell 来调用,也可以使用!首先,我们从创建一个虚拟项目文件夹开始:

这里我们假设有三个子文件夹:data 包含数据,dofiles 包含 Stata 脚本,figures 包含图形等。重要的是我们知道根文件夹的路径。我按如下方式启动 dofile:
clear
cap cd "D:/Programs/Dropbox/Dropbox/STATA-MEDIUM/graphs/github"
我们可以在上面的 dofile 文件夹中将这个 dofile 保存为 setup.do。我们还可以加载 COVID-19 数据并将其保存在数据文件夹中:
************************
*** COVID 19 data ***
************************
insheet using "https://covid.ourworldindata.org/data/owid-covid-data.csv", clear
gen date2 = date(date, "YMD")
format date2 %tdDD-Mon-yy
drop date
ren date2 date
ren location country
replace country = "Slovak Republic" if country == "Slovakia"
replace country = "Czech Republic" if country == "Czechia"
replace country = "Kyrgyz Republic" if country == "Kyrgyzstan"
replace country = "Macedonia" if country == "North Macedonia"
drop if date < 21915
save "./data/OWID_data.dta", replace
**********************************
*** Country classifications ***
**********************************
copy "https://github.com/asjadnaqvi/COVID19-Stata-Tutorials/blob/master/master/country_codes.dta?raw=true" ///
"./data/country_codes.dta", replace
现在我们可以生成清理数据了。具体操作如下:
use "./data/OWID_data.dta", clear
merge m:1 country using "./data/country_codes.dta"
drop if _m!=3
keep country date new_cases new_deaths group*
summ date
drop if date>=r(max) - 2
gen region = .
replace region = 1 if group29==1 & country=="United States" // North America
replace region = 2 if group29==1 & country!="United States" // North America
replace region = 3 if group20==1 & country=="Brazil" // Latin America and Carribean
replace region = 4 if group20==1 & country!="Brazil" // Latin America and Carribean
replace region = 5 if group10==1 & country=="Germany" // Germany
replace region = 6 if group10==1 & country!="Germany" // Rest of EU
replace region = 7 if group8==1 & group10!=1 & country=="United Kingdom" // Rest of Europe and Central Asia
replace region = 8 if group8==1 & group10!=1 & country!="United Kingdom" // Rest of Europe and Central Asia
replace region = 9 if group26==1 // MENA
replace region = 10 if group37==1 // Sub-saharan Africa
replace region = 11 if group35==1 & country=="India" // South Asia
replace region = 12 if group35==1 & country!="India" // South Asia
replace region = 13 if group6==1 // East Asia and Pacific
lab de region 1 "United States" 2 "Rest of North America" 3 "Brazil" 4 "Rest of Latin America" ///
5 "Germany" 6 "Rest of European Union" 7 "United Kingdom" 8 "Rest of Europe" ///
9 "MENA" 10 "Sub-Saharan Africa" 11 "India" 12 "Rest of South Asia" 13 "East Asia and Pacific"
lab val region region
collapse (sum) new_cases new_deaths, by(date region)
xtset region date
tssmooth ma new_cases_ma7 = new_cases , w(6 1 0)
tssmooth ma new_deaths_ma7 = new_deaths , w(6 1 0)
format date %tdDD-Mon-YY
format new_cases %9.0fc
生成一些基本图表:
set scheme black_w3d
graph set window fontface "Arial Narrow"
xtline new_deaths_ma7, overlay xtitle("") ytitle("New deaths (7 day M-A)") ///
graph export ./figures/region_deaths.png, replace wid(1000)
xtline new_cases_ma7, overlay xtitle("") ytitle("New cases (7 day M-A)") ///
graph export ./figures/region_cases.png, replace wid(1000)
twoway (scatter new_deaths_ma7 new_cases_ma7, mc(%10) ms(vsmall)), ///
xtitle("New deaths (7 day M-A)") ytitle("New cases (7 day M-A)")
graph export ./figures/scatter_cases_deaths.png, replace wid(1000)
twoway (scatter new_cases_ma7 new_deaths_ma7, mc(pink%10) ms(vsmall)), ///
xtitle("New cases (7 day M-A)") ytitle("New deaths (7 day M-A)")
graph export ./figures/scatter_deaths_cases.png, replace wid(1000)
它将这四个图形保存在图形目录中:




现在文件夹中已经放置了我们需要的文件,接着准备将这些推送到 GitHub。
4.1 第一次安装 GitHub
在这里,我们回到 GitHub 简介那里:

由于我们已经安装了 Git,我们现在也可以在 Stata 中使用这些命令了。首先,我们需要确保我们在正确的目录中。您可以通过键入以下内容进行检查:
dir // for Windows
ls // for Mac and Unix
这个命令会显示现在工作夹的目录。如果在代码中切换到某些子文件夹,只需确保你位于要同步的根文件夹中。接下来我们需要使用一堆 Git 命令。这是一份官方备忘单,可帮助你入门:https://training.github.com/downloads/github-git-cheat-sheet.pdf。
如果是第一次使用这个,则需要生成 README.md
文件,在线指向该文件夹,并连接它。我们使用以下步骤执行此操作。使用以下命令生成 README.md
文件:
! echo # github-tutorial >> README.md
操作符 #
表示自述文件的标题是 "github-tutorial"。在 Stata 中,不要将 #
和标题括在双引号中,而应该使用单引号中。接下来我们初始化 Git 代码:
! git init
这两个命令应该创建 README.md
文件并将这个隐藏的 .git
目录创建到你的文件夹中:

两者对于你的文件夹正确在线同步都是必不可少的。接下来我们添加 README.md
文件并提交它:
! **git add** README.md
! **git commit** -m 'my first upload'
在提交命令中,我们还需要添加一个小描述。描述越准确,版本控制越好。例如,这可以是 "v1.015 added on 26042021" 之类的内容。接下来我们定义要添加此文件的目录:
! git remote add origin **https://github.com/asjadnaqvi/github-tutorial.git
该路径正是出现在您上面的 GitHub 设置页面上的路径。然后我们将这些更改推送到目录:
! git push -u origin main
最后两个命令是要记住的关键命令。在某些时候,你将被要求登录并使用 GitHub 对应用程序进行身份验证,以使其访问你的帐户:

完成后,你的 README.md
应该会出现在网站上:

4.2 同步 GitHub 上的所有文件
创建 README.md
文件后,可以在任何文本编辑器中对其进行修改。这里用的是 Notepad++。

我们还需要添加剩余的文件夹及其内容。使用命令 shell 提示符和下面的一组基本命令可以完成这些操作。
git remote add origin "https://github.com/asjadnaqvi/github-tutorial.git"git status
git add --all
git commit -m "minor fixes"
git push
在 Stata 中,我们遇到了一个技术问题。每次我们使用 !
或 shell
调用 DOS shell 时,都会执行并关闭实例。对于 git,我们需要确保所有命令在同一个实例中运行,因为每个命令都存储有关要同步什么、如何同步以及如何处理版本控制的新信息。随着人们朝着更高级的同步发展,也可以添加各种命令。
为了规避这个批处理命令问题,我们回到 DOS 功能的基础。在这里,我们可以定义一个 DOS 批处理文件或 .bat
文件,其中包含许多不同的基于语法的命令。我们可以在 Stata 中编写这个批处理文件,也可以在 Stata 中使用 shell 命令执行它。
首先,让我们使用 file
(参见 help file
) 命令来编写批处理文件:
file close _all
file open git using mygit.bat, write replace
file write git "git remote add origin " `"""' "https://github.com/asjadnaqvi/github-tutorial.git" `"""' _n
file write git "git add --all" _n
file write git "git commit -m "
file write git `"""' "minor fixes" `"""' _n
file write git "git push" _n
file close git
我们关闭所有打开的文件 (也适用于 Stata 日志)。然后,我们打开一个名为 mygit.bat
的新批处理文件。这只是一个参考名称,以防打开多个文本文件。然后,作者编写了一堆想要运行的 git 语法。完成所有命令后,关闭 git 文件。我们还可以在文本编辑器中查看 mygit.bat
文件。它只是我们想要按顺序运行的一堆 git 命令:

可以在 Stata 中执行 mygit.bat
文件,只需输入:
! mygit.bat
就可以看到如下同步的样式:

在操作成功后,更改也会显示在 GitHub 上。我们也可以使用 git 命令来拉取、合并、删除、修改文件。Git 非常广泛,本文只是一个介绍,如果你有其他建议、意见和反馈,可以与我们分享。
5. 相关推文
Note:产生如下推文列表的 Stata 命令为:
lianxh github, m
安装最新版lianxh
命令:
ssc install lianxh, replace



资源共享
- 连享会资料 ……
- 在线视频:lianxh-class.cn
- Stata 33 讲,100 万+ 播放,Stata 入门必备,公开课
- 直击面板数据模型,10 万+ 播放,白话面板模型,公开课
- … more …
- 论文复现和数据
- 主题分类
- 热门推文

尊敬的老师 / 亲爱的同学们:
连享会致力于不断优化和丰富课程内容,以确保每位学员都能获得最有价值的学习体验。为了更精准地满足您的学习需求,我们诚挚地邀请您参与到我们的课程规划中来。
请您在下面的问卷中,分享您 感兴趣的学习主题或您希望深入了解的知识领域 。您的每一条建议都是我们宝贵的资源,将直接影响到我们课程的改进和创新。
我们期待您的反馈,因为您的参与和支持是我们不断前进的动力。感谢您抽出宝贵时间,与我们共同塑造更加精彩的学习旅程!https://www.wjx.cn/vm/YgPfdsJ.aspx# 再次感谢大家宝贵的意见!

关于我们
- Stata连享会 由中山大学连玉君老师团队创办,定期分享实证分析经验。more……
- 扫码加入连享会微信群,提问交流更方便
