在R中使用Stata .do文件

时间:2013-01-06 13:03:42

标签: r stata

我正在寻找一种方法 - 如果有的话 - 在R中使用Stata语法文件 我有一个包含国家/地区名称的数据集和一个可以翻译名称的Stata .do文件 进入奶牛国家代码:

USA = 1
阿富汗= 700

为什么我可以将该文件与R一起使用,或者我需要找一个Stata的人为我做这个吗?

非常感谢任何帮助,谢谢:)

编辑:
.do文件是纯文本,我可以在Chrome或Textmate中打开它 它看起来像这样:

capture drop gwno
gen gwno=.
replace gwno=   700 if country==    "Afganistan"
replace gwno=   700 if country==    "Afghanistan"
replace gwno=   700 if country==    "AFGHANISTAN"
replace gwno=   339 if country==    "Albania"
replace gwno=   615 if country==    "Algeria"
replace gwno=   232 if country==    "Andorra"
replace gwno=   540 if country==    "Angola"
replace gwno=   58  if country==    "Antigua & Barbuda"
...

3 个答案:

答案 0 :(得分:3)

简答:在你的编辑器中删除所有“replace gwno =”,然后用逗号替换所有“if country ==”。删除第一个标题行和最后的任何内容。

现在您有一个以逗号分隔的代码和国家/地区文件。阅读R,制作数据框,然后使用match将国家/地区替换为数字。

Apols粗略回答,但大多数是基本的R。

您也可以尝试使用read.table或read.csv读取R文件,跳过前两行,然后您的代码和国家/地区位于第3和第6列。

答案 1 :(得分:3)

Juste改写@Spacedman说nto 1-line R命令,

read.table(file = stat.file,skip=2)[,c(6,3)]

                 V6  V3
1        Afganistan 700
2       Afghanistan 700
3       AFGHANISTAN 700
4           Albania 339
5           Algeria 615
6           Andorra 232
7            Angola 540
8 Antigua & Barbuda  58

答案 2 :(得分:0)

我只是偶然发现了这个问题,我想为这个问题发布一个更为通用的解决方案,即使你没有要求这个问题 - 但它可能对其他人有用。

您的任务显然是将国家/地区名称映射到国家/地区代码(在项目“Correlates of War”中使用)。有一个名为countrycode的软件包非常有用,因为它可以将国家/地区名称转换为ISO代码,COW代码等等:

df <-
  structure(
    list(
      name = c(
        "Afganistan",
        "Afghanistan",
        "AFGHANISTAN",
        "Albania",
        "Algeria",
        "Andorra",
        "Angola",
        "Antigua & Barbuda"
      ),
      ccode = c("700", "700", "700", "339", "615", "232", "540", "58")
    ),
    class = "data.frame",
    .Names = c("name", "ccode"),
    row.names = c(NA,-8L)
  )
df$ccode2 <- countrycode::countrycode(sourcevar = df$name,
                                      origin = "country.name",
                                      destination = "cown")

哪个会给你:

               name ccode ccode2
1        Afganistan   700     NA
2       Afghanistan   700    700
3       AFGHANISTAN   700    700
4           Albania   339    339
5           Algeria   615    615
6           Andorra   232    232
7            Angola   540    540
8 Antigua & Barbuda    58     58
Warning message:
In countrycode::countrycode(sourcevar = df$name, origin = "country.name",  :
  Some values were not matched unambiguously: Afganistan

请注意,阿富汗的拼写错误导致NA。该警告可帮助您识别此类情况。您可以使用参数custom_match

来解决此问题
df$ccode2 <- countrycode::countrycode(sourcevar = df$name,
                                  origin = "country.name",
                                  destination = "cown", 
                                  custom_match = c("Afganistan" = "700"))

结果是:

               name ccode ccode2
1        Afganistan   700    700
2       Afghanistan   700    700
3       AFGHANISTAN   700    700
4           Albania   339    339
5           Algeria   615    615
6           Andorra   232    232
7            Angola   540    540
8 Antigua & Barbuda    58     58