如何将SIF日期转换为HRF并将它们保存在Stata的宏中?

时间:2016-05-18 12:54:39

标签: date stata

Stata有一些简单的功能可以将人类可读形式(HRF)的日期转换为Stata内部形式(SIF)。但是,我想将SIF日期转换为HRF日期。使用display %td和相关命令,我可以打印正确的日期。但我想将转换后的日期保存到宏中。 遗憾的是,以下代码段不起作用:

di %tw 2080
local week %tw 2080
di "`week'"

更新:我现在使用以下循环来实现重新标记变量的最初目的。

foreach i of varlist week_* {
   local weekcount = substr("`i'", 6, 9)
   local tmp_year = 1960 + int(`weekcount'/52)
   local tmp_week = 1 + `weekcount' - int(`weekcount'/52)*52
   lab var `i' "`tmp_year'w`tmp_week'"
}

1 个答案:

答案 0 :(得分:2)

这个答案分为两个不同的部分。

首先,我非常怀疑您的日期是否符合Stata每周日期。这些每周日期的定义是

  1. 任何一年的第1周从1月1日开始,无论一周中的哪一天。

  2. 第2周等等,开始7天后的倍数。

  3. 第52周总是包括8天(非闰年)或9天(闰年)。

  4. 因此,几周总是在几年内筑巢。规则#2本身并不令人惊讶,但规则#1和#3通常都是。

    我还没有遇到使用这些定义的StataCorp以外的任何机构,尽管第一次会有所帮助!

    其次,您的语法不能满足您的需求。举个例子,这里遇到的问题是display的工作是解释它作为显示指令给出的内容,而不是完全回应它的论点。使用macro list(并忽略不相关的细节),

    .  local week %tw 2080
    
    . mac li
    _week:          %tw 2080
    

    表明您的local作业只会复制您提供的文字。 display将其视为一条指令,但在display上下文之外,格式不会受到影响。将displayextended_fcnmacro的帮助中的材料拼接在一起会产生语法

    . local week : display %tw 2080
    
    . mac li
    _week:           2000w1
    

    应用格式并根据请求将格式的结果放在宏中。

    更多关于display:这个序列很有启发性。

    . di "%tw 2080"
    %tw 2080
    
    . di %tw "2080"
    2080
    
    . di %tw 2080
     2000w1
    

    在第一个中,格式%tw作为文字字符串的一部分包含在内,因此不被视为指令。在第二种情况下,格式被忽略,仅与数字参数相关,因此与" "所呈现的文字字符串无关。在第三个,你会得到你想要的。

    有关Stata周的更多信息,请参阅

    的结果
    . search week, sj
    
    Search of official help files, FAQs, Examples, SJs, and STBs
    
    SJ-12-4 dm0065_1  . . . . . Stata tip 111: More on working with weeks, erratum
            . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  N. J. Cox
            Q4/12   SJ 12(4):765                                     (no commands)
            lists previously omitted key reference
    
    SJ-12-3 dm0065  . . . . . . . . . .  Stata tip 111: More on working with weeks
            . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  N. J. Cox
            Q3/12   SJ 12(3):565--569                                (no commands)
            discusses how to convert data presented in yearly and weekly
            form to daily dates and how to aggregate such data to months
            or longer intervals
    
    SJ-10-4 dm0052  . . . . . . . . . . . . . . . . Stata tip 68: Week assumptions
            . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  N. J. Cox
            Q4/10   SJ 10(4):682--685                                (no commands)
            tip on Stata's solution for weeks and on how to set up
            your own alternatives given different definitions of the
            week
    

    如果您在Stata中执行此操作,您将获得相关文章的可点击链接。底线是一条建议:通过日常日期来定义周数,通常但不一定是一周的开始或结束。

    完全不同的细节是您拥有广泛的数据结构,这在Stata中通常比长数据结构更成问题。

    注意:在我写这篇文章的过程中编辑了这个问题,所以有些章节引用了问题中不再存在的材料。