Stata与Github交互

发布时间:2022-10-02 阅读 539

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下载 - 推文合集

作者:王萃芳 (东北财经大学)
邮箱wcfsophia@26.com

编者按:本文主要摘译自下文,特此致谢!
Source:Asjad Naqvi, 2022, Blog, Stata and GitHub Integration. -Link-


目录


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 搜索并键入cmdpowershell

打开 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

相关课程

免费公开课

最新课程-直播课

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

课程主页

课程主页

关于我们

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

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

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

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

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