创建一个只是Stata中字符串变量的某个部分的变量

时间:2014-01-23 17:01:54

标签: stata

我有一个数据集,其中有一个变量,其中包含url作为其观察结果。我正在尝试创建另一个变量,该变量将在“url”变量(.com.org.co.uk等中列出观察的域类型。)

我可以通过使用“。”解析来拆分“url”变量。

split url, p(.)

但这不会明确地给我域名。

问题出现是由于“url”类型的差异很大。例如

  • 虽然www.google.com将被分为3个变量,http://www.nih.nlm.gov将被拆分为4个
  • 同样,www.yahoo.com分为3时,https://www.movies.yahoo.co.au会被拆分为5。

如何在stata中编写以下公式,以便从“url”变量创建“域类型”变量

  

      
  • 如果是最后一个“。”之后的部分。在“url”变量中有≥3个字符(.com / .edu / .org / .gov或.info),然后将其用作域类型

         
        

          
    • 如果是最后一个“。”之后的部分。在“url”变量中有< 3个字符(.uk / .au / .tv等) AND 最后一个“。”之前的部分。有≤2个字符(.co),然后使用倒数第二个“。”之后的部分。作为域类型(即.co.uk)

               
            

              
      • 如果最后一个“。”之后的值。在“url”变量中有< 3个字符(.us域名) AND 最后一个“。”之前的部分。有> 2个字符,然后使用最后一个“。”之后的部分。作为域类型(例如freeshootinggames.us)
      •       
    •       
  •       

    
  

另外,还有另一种方法吗?

我在Windows 8 Pro x64上使用Stata 13.1

谢谢!

1 个答案:

答案 0 :(得分:2)

在这样的问题中,反转字符串是一个有用的技巧。尝试这样的事情:

gen rev_url = reverse(url)
split rev_url, parse(.) gen(domain_)
replace domain_1 = reverse(domain_1)
replace domain_2 = reverse(domain_2)
replace domain_1 = domain_2 + "." + domain_1 if length(domain_2)<=2 & length(domain1)<3
rename domain_1 domain
drop domain_* rev_url