[Date Prev][Date Next][Thread Prev][Thread Next][Date index][Thread index]

From |
"Nick Cox" <n.j.cox@durham.ac.uk> |

To |
<statalist@hsphsun2.harvard.edu> |

Subject |
st: RE: displaying date but also the time! |

Date |
Wed, 18 Dec 2002 13:31:06 -0000 |

Iwan Barankay > I am at a loss on how to display dates that also contain the time of > day. > > I converted data from Exel where an entry is the date but also the > time. > That is I had a variable 'datetod' with an entry like "11/04/2002 > 08:00:00" > which converted into "15441.33333" > then I wanted to display it but Stata only let's me display the date > but not the time, i.e. I can only do > format datetod %dD_m_Y > which then displays only as "11 Apr 02" (e.g. on graphs) but I would > like it to display as something like > "11 Apr 02 08:00:00" that is also the time! > > is there a way to do this? > > A thousand thanks and have a nice end of year break (whatever the > time...), No and yes. Official Stata offers nothing directly for time of day formats, so far as I know. But you can knit your own or see what users have done. In a thread yesterday, I drew attention to a bundle of stuff, mostly written by Kit Baum, in the -egenmore- package on SSC. At first glance, none of those provide exactly what you want, but moving in your direction is not too difficult. For display, a string variable will often be fine. You want first a string equivalent of your daily dates: . gen str1 sdatetime = "" . replace sdatetime = string(date,"%dd_m_Cy") Then you need to concatenate with a string time of day variable in the form "hh:mm:ss". . replace sdatetime = sdatetime + " " + stod Alternatively, you need to go back to Excel, and just copy the original column to Stata as a string variable. It is almost what you want, modulo some surgery. Suppose a string variable -excellike- contains dates like "11/04/2002 08:00:00" something like this maps to your format: tokenize Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec forval i = 1/12 { local j : di %02.0f `i' qui replace excellike = /* */ subinstr(excellike,"/`j'/","``i''",.) } replace excellike = subinstr(excellike,"200","0",.) However, these string variables cannot be used in graphs, which you also mention. Incidentally if, on a graph, one label is "11 Apr 02 08:00:00" then there won't be room for many others! I just recently drafted an FAQ on nice time labels, which I have not yet submitted to Stata Corp. I give it below without translating directly to your example, not least because it may interest others. <begin of draft FAQ> How can I get "nice" time of day labels on a graph? 1. The problem If you are graphing data in Stata against time of day, one of your axes will show time. For all but the crudest exploratory graphics, good labeling of that axis is important. Tastes and conventions may vary, but many people like to show times for whole hours and in the form 12:00. Sometimes people like to distinguish times that are a.m. and times that are p.m. These may be called "nice" or "round" labels and go beyond what may be achieved by using -format-. A companion FAQ addresses the question of date labels for daily dates: How can I get "nice" date labels on a graph? http://www.stata.com/support/faqs/graphics/nicedate.html. The main trick suggested is to use -foreach- to define value labels including the required text. A detailed tutorial on this command is given in Stata Journal 2(2), 202-222 (2002). For labels, see the on-line help for -label-. In what follows, we assume that time goes on the x axis. If you put time on the y axis, you just need to think in terms of the corresponding options; that is, for -xlabel-, read -ylabel-, and so forth. We also assume that time is measured on a scale running from 0 (usually midnight) to, or almost to, 24 (usually also midnight). If your time origin is not midnight, you will need to modify the recipes here. 2. The solution Let us first suppose that you want labels for your variable -timeofday- to be in steps of three hours from midnight to midnight in the form 9:00 or 15:00. We type . foreach t of num 0(3)24 { . label def tod `t' "`t':00", modify . } . label val timeofday tod . graph whatever timeofday, options xla(0(3)24) First, given the numlist 0(3)24 the value label for 0 is defined as "0:00", that for 3 as "3:00", and so forth. Then these value labels are attached to our -timeofday- variable. Given a request to show those numbers as -xlabel-s on a graph on which -timeofday- is shown on the x axis, Stata automatically uses attached value labels instead. As you may know, the entity (here t) controlling the -foreach- loop is a local macro; inside the loop, its contents are referenced by `t'. Next suppose that you want labels for your variable -timeofday- to be in a.m. or p.m. form such as "9 a.m.". If only a few labels are required, defining them directly may be simplest: . label def tod 0 "12 a.m." 6 "3 a.m." 12 "12 p.m." 18 "6 p.m." 24 "12 a.m." . label val timeofday tod . graph whatever, options xla(0(6)24) Naturally, you may prefer some other convention for showing midnight or noon. Notice that there is no problem if the same label is used for different integers. If we wanted to do this in a loop, the boundary cases may need special care, so much so that typing out definitions one by one is attractive by comparison: . foreach t of num 0(3)24 { . local T = mod(`t',12) . local T = cond(`T' == 0, 12, `T') . local txt = cond(`t' < 12 | `t' == 24, "a.m.", "p.m.") . label def tod `t' "`T' `txt'", modify . } . label val timeofday tod . graph whatever timeofday, options xla(0(3)24) The functions -mod()- and -cond()- used here are explained at [U] 16.3.1 Mathematical functions and [U] 16.3.6 Special functions respectively. For further discussion, see Stata Journal 2(4), 411-427 (2002). If you want for some reason to show a label for a time such as 12:45 p.m., then you need to use a scale on which that time is an integer. In this example, multiplying 12.75 by 4 yields 51; this and other times which are multiples of 15 minutes can then be labeled. <end of draft FAQ> Nick n.j.cox@durham.ac.uk * * For searches and help try: * http://www.stata.com/support/faqs/res/findit.html * http://www.stata.com/support/statalist/faq * http://www.ats.ucla.edu/stat/stata/

**References**:**st: displaying date but also the time!***From:*"Iwan Barankay" <I.Barankay@warwick.ac.uk>

- Prev by Date:
**st: Re: Markov switching regression** - Next by Date:
**st: RE: Weights with -table- and -tabulate-** - Previous by thread:
**st: displaying date but also the time!** - Next by thread:
**st: Re: Markov switching regression** - Index(es):

© Copyright 1996–2014 StataCorp LP | Terms of use | Privacy | Contact us | What's new | Site index |