2016-06-07 2364 views
-2

我对Stata比较陌生。我有可变time一个字符串,记录年份和月份的格式如下:Stata:将字符串转换为日期

2000m1 
2000m2 
2000m3 
... 
2015m12 

我想首先创建一个日期变量,看起来相同(但必须是在日期格式)以上。其次,我想将年份和月份分成两个不同的变量,第三,我想将月份组件重命名为1月,2月等。

对于第一个任务,命令date = date(time, "YM")返回一个空变量我无法弄清楚我做错了什么。

+0

这里引用了什么是一个命令不是一个完整的命令:大概是一个启动'产生'的意图。 –

+0

有人猜测,因为downvoters没有解释,downvoting反映了明显无法公正地阅读文档的判断。 (SO不作为初学者的论坛,但对于专业和发烧友程序员来说,阅读文档是最低要求。) –

回答

0

功能date()产量每天日期,不包月日期或任何其他类型的日期,是不是每天的日期。看到它的帮助(help date()),它开始

date(s1,s2[,Y]) 
     Description: the e_d date (days since 01jan1960) corresponding to s1 
        based on s2 and Y 

        s1 contains the date, recorded as a string, in virtually 
        any format. Months can be spelled out, abbreviated (to 
        three characters), or indicated as numbers; years can 
        include or exclude the century; blanks and punctuation are 
        allowed. 

        s2 is any permutation of M, D, and [##]Y, with their order 
        defining the order that month, day, and year occur in s1. 
        ##, if specified, indicates the default century for 
        two-digit years in s1. For instance, s2="MD19Y" would 
        translate s1="11/15/91" as 15nov1991. 

在本质上,它需要一天,一个月,一年,被告知。你提供了一个月和一年,而date()不会(不能)发挥。

正如在同一地方记录的那样,daily()是同一功能的同义词,它是一种很好的习惯,可以用它来提醒自己(以及代码的读者)它的功能。

相应地,monthly()提供了一种更简单的解决方案,可以根据字符串输入创建月度日期,而不是您自己的答案。尝试使用display(允许使用di)的解决方案,在您知道正确答案的简单案例中。

. di monthly("2000m1", "YM") 
480 

. di %tm monthly("2000m1", "YM") 
2000m1 

阅读文档至关重要。请参阅help datetime开始。有很多解释,日期有很多不同的形式,但都记录在案。

另请参阅help datetime_display_formats了解如何以不同方式显示日期。 (在这里没有“重命名”。)例如,

. di %tmMonth_CCYY monthly("2000m1", "YM") 
    January 2000 
0

试试这个代码可以是你的作品

string Date1 = String.Format("{0}", Request.Form["date"]); 
     string Date2 = String.Format("{0}", Request.Form["date1"]); 

     Date1 = DateTime.Parse(Date1).ToString("yyyy-MM-dd"); 
     Date2 = DateTime.Parse(Date2).ToString("yyyy-MM-dd"); 
+0

谢谢,但“命令字符串无法识别”是我输入第一条命令时得到的错误。 – firemind

+0

将此字符串替换为字符串名称 –

+1

这不是Stata语法。对于OP或任何其他人来说,它可能是也可能不是一个好的选择,但解释使用什么语言是至关重要的。 –

1

我想通了第一部分。我张贴的答案,这里任何人谁需要一个参考:

gen date = ym(real(substr(time, 1,4)),real(substr(time,6,2))) 

format date %tm 
+0

我在这里逆转了downvote。这在我看来并不是最好的答案(使用'monthly()'要简单得多),但这是一个正确的答案。 –