Differences between revisions 1 and 8 (spanning 7 versions)
Revision 1 as of 2022-03-16 15:40:42
Size: 1202
Comment:
Revision 8 as of 2023-06-13 23:04:14
Size: 3634
Comment:
Deletions are marked like this. Additions are marked like this.
Line 2: Line 2:

Stata supports these '''numeric functions''' in the global scope.
Line 9: Line 11:
== Random Number Functions == == Dhms ==
Line 11: Line 13:
=== Runiform === Convert an date value (formatted as `%td) plus an hour, minute, and second into the number of milliseconds since the Stata epoch (`01jan1960 00:00:00.000`) ''ignoring'' leap seconds.

{{{
generate double datetime = dhms(dmy(day, month, year), hour, minute, second)
format date %tc
}}}

See also `Cdhms`, which creates returns a number that should instead be formatted as `%tC` because it does ''not'' ignore leap seconds.

----



== Dmy ==

Convert a day, month, and year into the number of days since the Stata epoch (`01jan1960 00:00:00.000`).

{{{
generate long date = dmy(day, month, year)
format date %td
}}}

----



== Hms ==

Convert an hour, minute, and second into the number of milliseconds since midnight ''ignoring'' leap seconds.

{{{
generate double datetime = hms(hour, minute, second)
format date %tc
}}}

See also `Chms`, which creates returns a number that should instead be formatted as `%tC` because it does ''not'' ignore leap seconds.

----



== Mdy ==

Convert a month, day, and year into the number of days since the Stata epoch (`01jan1960 00:00:00.000`).

{{{
generate long date = mdy(month, day, year)
format date %td
}}}

----



== Mdyhms ==

Convert a day, month, year, hour, minute, and second into the number of milliseconds since the Stata epoch (`01jan1960 00:00:00.000`) ''ignoring'' leap seconds.

{{{
generate double datetime = mdyhms(month, day, year, hour, minute, second)
format date %tc
}}}

See also `Cmdyhms`, which creates returns a number that should instead be formatted as `%tC` because it does ''not'' ignore leap seconds.

----



== Real ==

----



== Runiform ==
Line 14: Line 91:

Below is a demonstration for how an [[SurveySamples#Sampling_Methods|SRS sample]] can be drawn.
Line 18: Line 97:
sort r_sampled
generate byte sampled = _n <= 100
Line 20: Line 101:
The return value is a [[Stata/Types|double]]; it will be within `a + c(epsdouble)` and `b − c(epsdouble)`. The return value is a [[Stata/DataTypes|double]]; it will be within `a + c(epsdouble)` and `b − c(epsdouble)`.
Line 22: Line 103:
By default, `runiform` uses the 64-bit Mersenne Twister algorithm. Alternate algorithms are available; see '''`set rng`'''. By default, `runiform` uses the 64-bit Mersenne Twister algorithm. Alternate algorithms are available; see [[Stata/Set#Rng|set rng]].

See also [[Stata/Set#Seed|set seed]] for designing deterministic programs.

----
Line 26: Line 111:
=== Set Rng === == String ==
Line 28: Line 113:
To use an alternate random number generation algorithm, set the rng value to something other than `default`. Alias for `strofreal`.
Line 30: Line 115:
{{{
set rng default
}}}

Possible values include...

 * `mt64` (64-bit Mersenne Twister)
 * `mt64s` (stream algorithm based on the 64-bit Mersenne Twister)
 * `kiss32` (32-bit keep it simple stupid)

In Stata 14, the default flipped from `kiss32` to `mt64`.
----
Line 44: Line 119:
=== Set Seed === == StrOfReal ==
Line 46: Line 121:
To make random number generation reproducible, set a seed value. ----



== Y ==

Convert a year into the number of years since the Stata epoch (`01jan1960 00:00:00.000`).
Line 49: Line 130:
set seed 42 generate int year = y(year)
format year %ty
Line 52: Line 134:
A seed value must be an integer, non-negative, and no greater than 2^31^ − 1. ----



== Yh ==

Convert a year and half year into the number of half years since the Stata epoch (`01jan1960 00:00:00.000`).

{{{
generate int halfyears = yh(year, halfyear)
format halfyears %th
}}}

----



== Ym ==

Convert a year and month into the number of months since the Stata epoch (`01jan1960 00:00:00.000`).

{{{
generate int months = y(year, month)
format months %tm
}}}

----



== Yq ==

Convert a year and quarter into the number of years since the Stata epoch (`01jan1960 00:00:00.000`).

{{{
generate int quarters = yq(year, quarter)
format quarters %tq
}}}

----



== Yw ==

Convert a year and week into the number of weeks since the Stata epoch (`01jan1960 00:00:00.000`).

{{{
generate int weeks = yw(year, week)
format weeks %tw
}}}

Stata Numeric Functions

Stata supports these numeric functions in the global scope.


Dhms

Convert an date value (formatted as %td) plus an hour, minute, and second into the number of milliseconds since the Stata epoch (01jan1960 00:00:00.000`) ignoring leap seconds.

generate double datetime = dhms(dmy(day, month, year), hour, minute, second)
format date %tc

See also Cdhms, which creates returns a number that should instead be formatted as %tC because it does not ignore leap seconds.


Dmy

Convert a day, month, and year into the number of days since the Stata epoch (01jan1960 00:00:00.000).

generate long date = dmy(day, month, year)
format date %td


Hms

Convert an hour, minute, and second into the number of milliseconds since midnight ignoring leap seconds.

generate double datetime = hms(hour, minute, second)
format date %tc

See also Chms, which creates returns a number that should instead be formatted as %tC because it does not ignore leap seconds.


Mdy

Convert a month, day, and year into the number of days since the Stata epoch (01jan1960 00:00:00.000).

generate long date = mdy(month, day, year)
format date %td


Mdyhms

Convert a day, month, year, hour, minute, and second into the number of milliseconds since the Stata epoch (01jan1960 00:00:00.000) ignoring leap seconds.

generate double datetime = mdyhms(month, day, year, hour, minute, second)
format date %tc

See also Cmdyhms, which creates returns a number that should instead be formatted as %tC because it does not ignore leap seconds.


Real


Runiform

runiform(a,b) returns a random number between a and b. If no parameters are specified, the defaults of 0 and 1 are used.

Below is a demonstration for how an SRS sample can be drawn.

set seed 123456
generate double r_sampled = runiform()
sort r_sampled
generate byte sampled = _n <= 100 

The return value is a double; it will be within a + c(epsdouble) and b − c(epsdouble).

By default, runiform uses the 64-bit Mersenne Twister algorithm. Alternate algorithms are available; see set rng.

See also set seed for designing deterministic programs.


String

Alias for strofreal.


StrOfReal


Y

Convert a year into the number of years since the Stata epoch (01jan1960 00:00:00.000).

generate int year = y(year)
format year %ty


Yh

Convert a year and half year into the number of half years since the Stata epoch (01jan1960 00:00:00.000).

generate int halfyears = yh(year, halfyear)
format halfyears %th


Ym

Convert a year and month into the number of months since the Stata epoch (01jan1960 00:00:00.000).

generate int months = y(year, month)
format months %tm


Yq

Convert a year and quarter into the number of years since the Stata epoch (01jan1960 00:00:00.000).

generate int quarters = yq(year, quarter)
format quarters %tq


Yw

Convert a year and week into the number of weeks since the Stata epoch (01jan1960 00:00:00.000).

generate int weeks = yw(year, week)
format weeks %tw


CategoryRicottone

Stata/NumericFunctions (last edited 2025-03-05 03:59:22 by DominicRicottone)