mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +00:00 
			
		
		
		
	Added .ado and .sthlp samples for Stata.
The author of this message, mwhite-IPA, is the source of these samples.
This commit is contained in:
		
							
								
								
									
										5
									
								
								samples/Stata/hello.ado
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								samples/Stata/hello.ado
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,5 @@ | |||||||
|  | program hello | ||||||
|  | 	vers 13 | ||||||
|  |  | ||||||
|  | 	display "Hello world!" | ||||||
|  | end | ||||||
							
								
								
									
										658
									
								
								samples/Stata/odkmeta.sthlp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										658
									
								
								samples/Stata/odkmeta.sthlp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,658 @@ | |||||||
|  | {smcl} | ||||||
|  | {* *! version 1.1.0 Matthew White 05jan2014}{...} | ||||||
|  | {title:Title} | ||||||
|  |  | ||||||
|  | {phang} | ||||||
|  | {cmd:odkmeta} {hline 2} Create a do-file to import ODK data | ||||||
|  |  | ||||||
|  |  | ||||||
|  | {marker syntax}{...} | ||||||
|  | {title:Syntax} | ||||||
|  |  | ||||||
|  | {p 8 10 2} | ||||||
|  | {cmd:odkmeta} | ||||||
|  | {cmd:using} | ||||||
|  | {it:{help filename}}{cmd:,} | ||||||
|  | {opt csv(csvfile)} | ||||||
|  | {* Using -help histogram- as a template.}{...} | ||||||
|  | {* -help histogram- notwithstanding, "opts" is rarely preceded by an underscore.}{...} | ||||||
|  | {cmdab:s:urvey(}{it:surveyfile}{cmd:,} | ||||||
|  | {it:{help odkmeta##surveyopts:surveyopts}}{cmd:)} | ||||||
|  | {cmdab:cho:ices(}{it:choicesfile}{cmd:,} | ||||||
|  | {it:{help odkmeta##choicesopts:choicesopts}}{cmd:)} | ||||||
|  | [{it:options}] | ||||||
|  |  | ||||||
|  | {* Using -help odbc- as a template.}{...} | ||||||
|  | {* 36 is the position of the last character in the first column + 3.}{...} | ||||||
|  | {synoptset 36 tabbed}{...} | ||||||
|  | {synopthdr} | ||||||
|  | {synoptline} | ||||||
|  | {syntab:Main} | ||||||
|  | {* Using -help heckman- as a template.}{...} | ||||||
|  | {p2coldent:* {opt csv(csvfile)}}name of the .csv file that | ||||||
|  | contains the ODK data{p_end} | ||||||
|  | {p2coldent:* {cmdab:s:urvey(}{it:surveyfile}{cmd:,} {it:{help odkmeta##surveyopts:surveyopts}}{cmd:)}}import | ||||||
|  | metadata from the {it:survey} worksheet {it:surveyfile}{p_end} | ||||||
|  | {p2coldent:* {cmdab:cho:ices(}{it:choicesfile}{cmd:,} {it:{help odkmeta##choicesopts:choicesopts}}{cmd:)}}import | ||||||
|  | metadata from the {it:choices} worksheet {it:choicesfile}{p_end} | ||||||
|  |  | ||||||
|  | {syntab:Fields} | ||||||
|  | {synopt:{opt drop:attrib(headers)}}do not import field attributes with | ||||||
|  | the column headers {it:headers}{p_end} | ||||||
|  | {synopt:{opt keep:attrib(headers)}}import only field attributes with | ||||||
|  | the column headers {it:headers}{p_end} | ||||||
|  | {synopt:{opt rel:ax}}ignore fields in {it:surveyfile} that | ||||||
|  | do not exist in {it:csvfile}{p_end} | ||||||
|  |  | ||||||
|  | {syntab:Lists} | ||||||
|  | {* Using -help ca- as a template.}{...} | ||||||
|  | {synopt:{cmdab:oth:er(}{it:{help odkmeta##other:other}}{cmd:)}}Stata value of | ||||||
|  | {cmd:other} values of {cmd:select or_other} fields; default is {cmd:max}{p_end} | ||||||
|  | {synopt:{opt one:line}}write each list on a single line{p_end} | ||||||
|  |  | ||||||
|  | {syntab:Options} | ||||||
|  | {synopt:{opt replace}}overwrite existing {it:{help filename}}{p_end} | ||||||
|  | {synoptline} | ||||||
|  | {p2colreset}{...} | ||||||
|  | {* Using -help heckman- as a template.}{...} | ||||||
|  | {p 4 6 2}* {opt csv()}, {opt survey()}, and {opt choices()} are required.{p_end} | ||||||
|  |  | ||||||
|  | {marker surveyopts}{...} | ||||||
|  | {* Change in {synoptset}: using -help odbc- as a template.}{...} | ||||||
|  | {synoptset 23 tabbed}{...} | ||||||
|  | {synopthdr:surveyopts} | ||||||
|  | {synoptline} | ||||||
|  | {syntab:Main} | ||||||
|  | {synopt:{opt t:ype(header)}}column header of the {it:type} field attribute; | ||||||
|  | default is {cmd:type}{p_end} | ||||||
|  | {synopt:{opt name(header)}}column header of the {it:name} field attribute; | ||||||
|  | default is {cmd:name}{p_end} | ||||||
|  | {synopt:{opt la:bel(header)}}column header of the {it:label} field attribute; | ||||||
|  | default is {cmd:label}{p_end} | ||||||
|  | {synopt:{opt d:isabled(header)}}column header of | ||||||
|  | the {it:disabled} field attribute; default is {cmd:disabled}{p_end} | ||||||
|  | {synoptline} | ||||||
|  | {p2colreset}{...} | ||||||
|  |  | ||||||
|  | {marker choicesopts}{...} | ||||||
|  | {synoptset 23 tabbed}{...} | ||||||
|  | {synopthdr:choicesopts} | ||||||
|  | {synoptline} | ||||||
|  | {syntab:Main} | ||||||
|  | {synopt:{opt li:stname(header)}}column header of | ||||||
|  | the {it:list_name} list attribute; default is {cmd:list_name}{p_end} | ||||||
|  | {synopt:{opt name(header)}}column header of the {it:name} list attribute; | ||||||
|  | default is {cmd:name}{p_end} | ||||||
|  | {synopt:{opt la:bel(header)}}column header of the {it:label} list attribute; | ||||||
|  | default is {cmd:label}{p_end} | ||||||
|  | {synoptline} | ||||||
|  | {p2colreset}{...} | ||||||
|  |  | ||||||
|  | {marker other}{...} | ||||||
|  | {synoptset 23 tabbed}{...} | ||||||
|  | {synopthdr:other} | ||||||
|  | {synoptline} | ||||||
|  | {synopt:{opt max}}maximum value of each list: maximum list value plus one{p_end} | ||||||
|  | {synopt:{opt min}}minimum value of each list: minimum list value minus | ||||||
|  | one{p_end} | ||||||
|  | {synopt:{it:#}}constant value for all value labels{p_end} | ||||||
|  | {synoptline} | ||||||
|  | {p2colreset}{...} | ||||||
|  |  | ||||||
|  |  | ||||||
|  | {marker description}{...} | ||||||
|  | {title:Description} | ||||||
|  |  | ||||||
|  | {pstd} | ||||||
|  | {cmd:odkmeta} creates a do-file to import ODK data, | ||||||
|  | using the metadata from the {it:survey} and {it:choices} worksheets of | ||||||
|  | the XLSForm. The do-file, saved to {it:filename}, | ||||||
|  | completes the following tasks in order: | ||||||
|  |  | ||||||
|  | {* Using -help anova- as a template.}{...} | ||||||
|  | {phang2}o  Import lists as {help label:value labels}{p_end} | ||||||
|  | {phang2}o  Add {cmd:other} values to value labels{p_end} | ||||||
|  | {phang2}o  Import field attributes as {help char:characteristics}{p_end} | ||||||
|  | {phang2}o  Split {cmd:select_multiple} variables{p_end} | ||||||
|  | {phang2}o  Drop {cmd:note} variables{p_end} | ||||||
|  | {phang2}o  {help format:Format} {cmd:date}, {cmd:time}, and | ||||||
|  | {cmd:datetime} variables{p_end} | ||||||
|  | {phang2}o  Attach value labels{p_end} | ||||||
|  | {phang2}o  Attach field labels as | ||||||
|  | {help label:variable labels} and {help notes}{p_end} | ||||||
|  | {phang2}o  {help merge:Merge} repeat groups{p_end} | ||||||
|  |  | ||||||
|  | {pstd} | ||||||
|  | After {cmd:select_multiple} variables have been split, | ||||||
|  | tasks can be removed from the do-file without affecting other tasks. | ||||||
|  | User-written supplements to the do-file may make use of any field attributes, | ||||||
|  | which are imported as characteristics. | ||||||
|  |  | ||||||
|  |  | ||||||
|  | {marker remarks}{...} | ||||||
|  | {title:Remarks} | ||||||
|  |  | ||||||
|  | {pstd} | ||||||
|  | The {cmd:odkmeta} do-file uses {helpb insheet} to import data. | ||||||
|  | Fields that are long strings of digits, such as {cmd:simserial} fields, | ||||||
|  | will be imported as numeric even if they are more than 16 digits. | ||||||
|  | As a result, they will lose {help precision}. | ||||||
|  |  | ||||||
|  | {pstd} | ||||||
|  | The do-file makes limited use of {help mata:Mata} to | ||||||
|  | manage variable labels, value labels, and characteristics and | ||||||
|  | to import field attributes and lists that contain difficult characters. | ||||||
|  |  | ||||||
|  | {pstd} | ||||||
|  | The do-file starts with the definitions of several {help local:local macros}; | ||||||
|  | these are constants that the do-file uses. | ||||||
|  | For instance, local macro {cmd:`datemask'} is the {help date():mask} of | ||||||
|  | date values in the .csv files. | ||||||
|  | The local macros are automatically set to default values, but | ||||||
|  | they may need to be changed depending on the data. | ||||||
|  |  | ||||||
|  |  | ||||||
|  | {* Using xtdpd_postspecial2b.ihlp as a template.}{...} | ||||||
|  | {marker remarks_field_names}{...} | ||||||
|  | {title:Remarks for field names} | ||||||
|  |  | ||||||
|  | {pstd} | ||||||
|  | ODK field names follow different conventions from | ||||||
|  | Stata's {help varname:constraints on variable names}. | ||||||
|  | Further, the field names in the .csv files are the fields' "long names," | ||||||
|  | which are formed by concatenating the list of the {it:groups} | ||||||
|  | in which the field is nested with the field's "short name." | ||||||
|  | ODK long names are often much longer than the length limit on variable names, | ||||||
|  | which is 32 characters. | ||||||
|  |  | ||||||
|  | {pstd} | ||||||
|  | These differences in convention lead to three kinds of | ||||||
|  | problematic field names: | ||||||
|  |  | ||||||
|  | {* Using -help 663- as a template.}{...} | ||||||
|  | {phang2}1.  Long field names that involve an invalid combination of characters, | ||||||
|  | for example, a name that begins with a colon followed by a number. | ||||||
|  | {helpb insheet} will not convert these to Stata names, | ||||||
|  | instead naming each variable {cmd:v} concatenated with a positive integer, | ||||||
|  | for example, {cmd:v1}.{p_end} | ||||||
|  | {phang2}2.  Long field names that are unique ODK names but | ||||||
|  | when converted to Stata names and truncated to 32 characters become duplicates. | ||||||
|  | {cmd:insheet} will again convert these to {cmd:v}{it:#} names.{p_end} | ||||||
|  | {phang2}3.  Long field names of the form {cmd:v}{it:#} that | ||||||
|  | become duplicates with other variables that cannot be converted, | ||||||
|  | for which {cmd:insheet} chooses {cmd:v}{it:#} names. | ||||||
|  | These will be converted to different {cmd:v}{it:#} names.{p_end} | ||||||
|  |  | ||||||
|  | {pstd} | ||||||
|  | Because of problem 3, | ||||||
|  | it is recommended that you do not name fields as {cmd:v}{it:#}. | ||||||
|  |  | ||||||
|  | {pstd} | ||||||
|  | If a field name cannot be imported, | ||||||
|  | its characteristic {helpb odkmeta##Odk_bad_name:Odk_bad_name} is {cmd:1}; | ||||||
|  | otherwise it is {cmd:0}. | ||||||
|  |  | ||||||
|  | {pstd} | ||||||
|  | Most tasks that the {cmd:odkmeta} do-file completes do not depend on | ||||||
|  | variable names. There are two exceptions: | ||||||
|  |  | ||||||
|  | {phang2}1.  The do-file uses {helpb split} to split | ||||||
|  | {cmd:select_multiple} variables. {cmd:split} will result in an error | ||||||
|  | if a {cmd:select_multiple} variable has a long name or | ||||||
|  | if splitting it would result in duplicate variable names.{p_end} | ||||||
|  | {phang2}2.  The do-file uses {helpb reshape} and {helpb merge} to merge | ||||||
|  | repeat groups. {cmd:reshape} will result in an error | ||||||
|  | if there are long variable names. The merging code will result in an error | ||||||
|  | if there are duplicate variable names in two datasets.{p_end} | ||||||
|  |  | ||||||
|  | {pstd} | ||||||
|  | Where variable names result in an error, renaming is left to the user. | ||||||
|  | The section of the do-file for splitting is preceded by | ||||||
|  | a designated area for renaming. | ||||||
|  | In the section for reshaping and merging, each repeat group has | ||||||
|  | its own area for renaming. | ||||||
|  |  | ||||||
|  | {pstd} | ||||||
|  | Many forms do not require any variable renaming. | ||||||
|  | For others, only a few variables need to be renamed; | ||||||
|  | such renaming should go in the designated areas. | ||||||
|  | However, some forms, | ||||||
|  | usually because of many nested groups or groups with long names, | ||||||
|  | have many long field names that become duplicate Stata names (problem 2 above). | ||||||
|  | In this case, it may work best to use fields' short names where possible. | ||||||
|  | The following code attempts to rename variables to their field short names. | ||||||
|  | Place it as-is before the renaming for {cmd:split}: | ||||||
|  |  | ||||||
|  | {cmd}{...} | ||||||
|  | {phang}foreach var of varlist _all {{p_end} | ||||||
|  | {phang2}if "`:char `var'[Odk_group]'" != "" {{p_end} | ||||||
|  | {phang3}local name = "`:char `var'[Odk_name]'" + ///{p_end} | ||||||
|  | {p 16 20 2}cond(`:char `var'[Odk_is_other]', "_other", "") + ///{p_end} | ||||||
|  | {p 16 20 2}"`:char `var'[Odk_geopoint]'"{p_end} | ||||||
|  | {phang3}local newvar = strtoname("`name'"){p_end} | ||||||
|  | {phang3}capture rename `var' `newvar'{p_end} | ||||||
|  | {phang2}}{p_end} | ||||||
|  | {phang}}{p_end} | ||||||
|  | {txt}{...} | ||||||
|  |  | ||||||
|  |  | ||||||
|  | {marker remarks_lists}{...} | ||||||
|  | {title:Remarks for lists} | ||||||
|  |  | ||||||
|  | {pstd} | ||||||
|  | ODK list names are not necessarily valid Stata names. | ||||||
|  | However, {cmd:odkmeta} uses list names as value label names, and | ||||||
|  | it requires that all ODK list names be Stata names. | ||||||
|  |  | ||||||
|  | {pstd} | ||||||
|  | ODK lists are lists of associations of names and labels. | ||||||
|  | There are two broad categories of lists: | ||||||
|  | those whose names are all integer and those with at least one noninteger name. | ||||||
|  | In the former case, the values of the value label are | ||||||
|  | the same as the names of the list. | ||||||
|  | In the latter, the values of the value label indicate | ||||||
|  | the order of the names within the list: | ||||||
|  | the first name will equal {cmd:1}, the second {cmd:2}, and so on. | ||||||
|  | For such lists, the value of the value label may differ | ||||||
|  | from the name of the list even if the name is a valid value label value; | ||||||
|  | what matters is whether all names of the list are integer. | ||||||
|  |  | ||||||
|  | {pstd} | ||||||
|  | However, the value labels of these lists are easy to modify. | ||||||
|  | Simply change the values of the value labels in the do-file; | ||||||
|  | the rest of the do-file will be unaffected. | ||||||
|  | Do not change the value label text. | ||||||
|  |  | ||||||
|  | {pstd} | ||||||
|  | Certain names do not interact well with {helpb insheet}, | ||||||
|  | which the {cmd:odkmeta} do-file uses to import the data. | ||||||
|  |  | ||||||
|  | {pstd} | ||||||
|  | For instance, it is not always possible to distinguish a name of {cmd:"."} from | ||||||
|  | {helpb missing:sysmiss}. When it is unclear, the do-file assumes that | ||||||
|  | values equal the name {cmd:"."} and not {cmd:sysmiss}. | ||||||
|  | The problem arises when {cmd:insheet} imports {cmd:select} fields whose | ||||||
|  | names in the data are the same as the values of a Stata numeric variable: | ||||||
|  | real numbers, {cmd:sysmiss}, and {help missing:extended missing values}. | ||||||
|  | {cmd:insheet} imports such fields as numeric, | ||||||
|  | converting blank values ({cmd:""}) as {cmd:sysmiss}, | ||||||
|  | thereby using the same Stata value for the name {cmd:"."} and for blank values. | ||||||
|  |  | ||||||
|  | {pstd} | ||||||
|  | {cmd:insheet} does not always interact well with list values' names that | ||||||
|  | look like numbers with leading zeros, for example, {cmd:01} or {cmd:0.5}. | ||||||
|  | If {cmd:insheet} imports a {cmd:select} field as numeric, | ||||||
|  | it will remove such leading zeros, leading to incorrect values or | ||||||
|  | an error in the do-file. For similar reasons, | ||||||
|  | trailing zeros after a decimal point may be problematic. | ||||||
|  |  | ||||||
|  | {pstd} | ||||||
|  | List values' names that look like decimals may also not interact well with | ||||||
|  | {cmd:insheet}. If {cmd:insheet} imports a {cmd:select} field as numeric, | ||||||
|  | the do-file will convert it to string. However, for {help precision} reasons, | ||||||
|  | the resulting string may differ from the original name | ||||||
|  | if the decimal has no exact finite-digit representation in binary. | ||||||
|  |  | ||||||
|  | {pstd} | ||||||
|  | Generally, names that look like numbers that cannot be stored precisely as | ||||||
|  | {helpb data_types:double} are problematic. | ||||||
|  | This includes numbers large in magnitude. | ||||||
|  |  | ||||||
|  |  | ||||||
|  | {marker remarks_variants}{...} | ||||||
|  | {title:Remarks for ODK variants} | ||||||
|  |  | ||||||
|  | {pstd} | ||||||
|  | {cmd:odkmeta} is not designed for features specific to ODK variants, | ||||||
|  | such as SurveyCTO or formhub. | ||||||
|  | However, it is often possible to modify the {cmd:odkmeta} do-file to account | ||||||
|  | for these features, | ||||||
|  | especially as all field attributes are imported as characteristics. | ||||||
|  |  | ||||||
|  | {pstd} | ||||||
|  | {ul:SurveyCTO} | ||||||
|  |  | ||||||
|  | {pstd} | ||||||
|  | For instance, the {cmd:odkmeta} do-file will result in an error for | ||||||
|  | SurveyCTO forms that contain dynamic choice lists. | ||||||
|  | One solution is to make the following changes to the do-file in order | ||||||
|  | to import {cmd:select} fields with dynamic lists as string variables. | ||||||
|  |  | ||||||
|  | {pstd} | ||||||
|  | One section of the {cmd:odkmeta} do-file encodes | ||||||
|  | {cmd:select} fields whose list contains a noninteger name. | ||||||
|  | Here, remove dynamic lists from the list of such lists: | ||||||
|  |  | ||||||
|  | {phang}{cmd:* Encode fields whose list contains a noninteger name.}{p_end} | ||||||
|  | {phang}{cmd:local lists list1 list2 list3 ...}{p_end} | ||||||
|  | {phang}...{p_end} | ||||||
|  |  | ||||||
|  | {pstd} | ||||||
|  | Above, if {cmd:list3} were a dynamic list, it should be removed. | ||||||
|  |  | ||||||
|  | {pstd} | ||||||
|  | The next section of the do-file attaches value labels to variables: | ||||||
|  |  | ||||||
|  | {cmd}{...} | ||||||
|  | {phang}* Attach value labels.{p_end} | ||||||
|  | {phang}ds, not(vallab){p_end} | ||||||
|  | {phang}if "`r(varlist)'" != "" ///{p_end} | ||||||
|  | {phang2}ds `r(varlist)', has(char Odk_list_name){p_end} | ||||||
|  | {phang}foreach var in `r(varlist)' {{p_end} | ||||||
|  | {phang2}if !`:char `var'[Odk_is_other]' {{p_end} | ||||||
|  | {phang}...{p_end} | ||||||
|  | {txt}{...} | ||||||
|  |  | ||||||
|  | {pstd} | ||||||
|  | Add a line to the second {helpb ifcmd:if} command to exclude fields whose | ||||||
|  | {it:appearance} attribute contains a {cmd:search()} expression: | ||||||
|  |  | ||||||
|  | {cmd}{...} | ||||||
|  | {phang}* Attach value labels.{p_end} | ||||||
|  | {phang}ds, not(vallab){p_end} | ||||||
|  | {phang}if "`r(varlist)'" != "" ///{p_end} | ||||||
|  | {phang2}ds `r(varlist)', has(char Odk_list_name){p_end} | ||||||
|  | {phang}foreach var in `r(varlist)' {{p_end} | ||||||
|  | {phang2}if !`:char `var'[Odk_is_other]' & ///{p_end} | ||||||
|  | {phang3}!strmatch("`:char `var'[Odk_appearance]'", "*search(*)*") {{p_end} | ||||||
|  | {phang}...{p_end} | ||||||
|  | {txt}{...} | ||||||
|  |  | ||||||
|  | {pstd} | ||||||
|  | The do-file will now import fields with dynamic lists without | ||||||
|  | resulting in an error. | ||||||
|  |  | ||||||
|  | {pstd} | ||||||
|  | {ul:formhub} | ||||||
|  |  | ||||||
|  | {pstd} | ||||||
|  | formhub does not export {cmd:note} fields in the .csv files; | ||||||
|  | specify option {cmd:relax} to {cmd:odkmeta}. | ||||||
|  |  | ||||||
|  | {pstd} | ||||||
|  | formhub exports blank values as {cmd:"n/a"}. | ||||||
|  | Multiple sections of the {cmd:odkmeta} do-file must be modified | ||||||
|  | to accommodate these. | ||||||
|  |  | ||||||
|  | {pstd} | ||||||
|  | Immediately before this line in the section for | ||||||
|  | formatting {cmd:date}, {cmd:time}, and {cmd:datetime} variables: | ||||||
|  |  | ||||||
|  | {phang} | ||||||
|  | {cmd:if inlist("`type'", "date", "today") {c -(}} | ||||||
|  |  | ||||||
|  | {pstd} | ||||||
|  | add the following line: | ||||||
|  |  | ||||||
|  | {phang} | ||||||
|  | {cmd:replace `var' = "" if `var' == "n/a"} | ||||||
|  |  | ||||||
|  | {pstd} | ||||||
|  | Immediately before this line in the section for attaching value labels: | ||||||
|  |  | ||||||
|  | {phang} | ||||||
|  | {cmd:replace `var' = ".o" if `var' == "other"} | ||||||
|  |  | ||||||
|  | {pstd} | ||||||
|  | add the following line: | ||||||
|  |  | ||||||
|  | {phang} | ||||||
|  | {cmd:replace `var' = "" if `var' == "n/a"} | ||||||
|  |  | ||||||
|  | {pstd} | ||||||
|  | These lines replace {cmd:"n/a"} values with blank ({cmd:""}). | ||||||
|  |  | ||||||
|  |  | ||||||
|  | {marker remarks_missing}{...} | ||||||
|  | {title:Remarks for "don't know," refusal, and other missing values} | ||||||
|  |  | ||||||
|  | {pstd} | ||||||
|  | ODK lists may contain missing values, including "don't know" and refusal values. | ||||||
|  | These will be imported as nonmissing in Stata. | ||||||
|  | However, if the lists use largely consistent names or labels for the values, | ||||||
|  | it may be possible to automate the conversion of the values to | ||||||
|  | {help missing:extended missing values} in Stata. | ||||||
|  | The following {help SSC} programs may be helpful: | ||||||
|  |  | ||||||
|  | {p2colset 5 18 22 2}{...} | ||||||
|  | {p2col:{cmd:labmvs}}{bf:{stata ssc install labutil2}}{p_end} | ||||||
|  | {p2col:{cmd:labmv}}{bf:{stata ssc install labutil2}}{p_end} | ||||||
|  | {p2col:{cmd:labrecode}}{bf:{stata ssc install labutil2}}{p_end} | ||||||
|  | {p2col:{cmd:labelmiss}}{bf:{stata ssc install labelmiss}}{p_end} | ||||||
|  | {p2colreset}{...} | ||||||
|  |  | ||||||
|  |  | ||||||
|  | {marker options}{...} | ||||||
|  | {title:Options} | ||||||
|  |  | ||||||
|  | {dlgtab:Main} | ||||||
|  |  | ||||||
|  | {phang} | ||||||
|  | {cmd:survey(}{it:surveyfile}{cmd:,} {it:surveyopts}{cmd:)} imports | ||||||
|  | the field metadata from the XLSForm's {it:survey} worksheet. | ||||||
|  | {opt survey()} requires {it:surveyfile} to be a comma-separated text file. | ||||||
|  | Strings with embedded commas, double quotes, or end-of-line characters must | ||||||
|  | be enclosed in quotes, and | ||||||
|  | embedded double quotes must be preceded by another double quote. | ||||||
|  |  | ||||||
|  | {pmore} | ||||||
|  | Each attribute in the {it:survey} worksheet has | ||||||
|  | its own column and column header. | ||||||
|  | Use the suboptions {opt type()}, {opt name()}, {opt label()}, and | ||||||
|  | {opt disabled()} to specify alternative column headers for | ||||||
|  | the {it:type}, {it:name}, {it:label}, and | ||||||
|  | {it:disabled} attributes, respectively. | ||||||
|  | All field attributes are imported as {help char:characteristics}. | ||||||
|  |  | ||||||
|  | {pmore} | ||||||
|  | If the {it:survey} worksheet has duplicate column headers, | ||||||
|  | only the first column for each column header is used. | ||||||
|  |  | ||||||
|  | {pmore} | ||||||
|  | The {it:type} characteristic is standardized as follows: | ||||||
|  |  | ||||||
|  | {phang2}o  {cmd:select one} is replaced as {cmd:select_one}.{p_end} | ||||||
|  | {phang2}o  {cmd:select or other} is replaced as {cmd:select or_other}: | ||||||
|  | {cmd:select_one} {it:list_name} {cmd:or other} is replaced as | ||||||
|  | {cmd:select_one} {it:list_name} {cmd:or_other}, and | ||||||
|  | {cmd:select_multiple} {it:list_name} {cmd:or other} is replaced as | ||||||
|  | {cmd:select_multiple} {it:list_name} {cmd:or_other}.{p_end} | ||||||
|  | {phang2}o  {cmd:begin_group} is replaced as {cmd:begin group}; | ||||||
|  | {cmd:end_group} is replaced as {cmd:end group}; | ||||||
|  | {cmd:begin_repeat} is replaced as {cmd:begin repeat}; | ||||||
|  | and {cmd:end_repeat} is replaced as {cmd:end repeat}.{p_end} | ||||||
|  |  | ||||||
|  | {pmore} | ||||||
|  | In addition to the attributes specified in the {it:survey} worksheet, | ||||||
|  | {cmd:odkmeta} attaches these characteristics to variables: | ||||||
|  |  | ||||||
|  | {pmore2} | ||||||
|  | {marker Odk_bad_name}{...} | ||||||
|  | {cmd:Odk_bad_name} is {cmd:1} | ||||||
|  | if the variable's name differs from its ODK field name and {cmd:0} if not. | ||||||
|  | See the {help odkmeta##remarks_field_names:remarks for field names} above. | ||||||
|  |  | ||||||
|  | {pmore2} | ||||||
|  | {cmd:Odk_group} contains a list of the {it:groups} | ||||||
|  | in which the variable is nested, in order of the {it:group} level. | ||||||
|  |  | ||||||
|  | {pmore2} | ||||||
|  | {cmd:Odk_long_name} contains the field's "long name," | ||||||
|  | which is formed by concatenating | ||||||
|  | the list of the {it:groups} in which the field is nested | ||||||
|  | with the field "short name," with elements separated by {cmd:"-"}. | ||||||
|  |  | ||||||
|  | {pmore2} | ||||||
|  | {cmd:Odk_repeat} contains the (long) name of the repeat group | ||||||
|  | in which the variable is nested. | ||||||
|  |  | ||||||
|  | {pmore2} | ||||||
|  | {cmd:Odk_list_name} contains the name of a {cmd:select} field's list. | ||||||
|  |  | ||||||
|  | {pmore2} | ||||||
|  | {cmd:Odk_or_other} is {cmd:1} | ||||||
|  | if the variable is a {cmd:select or_other} field and {cmd:0} if not. | ||||||
|  |  | ||||||
|  | {pmore2} | ||||||
|  | {cmd:Odk_is_other} is {cmd:1} | ||||||
|  | if the variable is a free-text {cmd:other} variable associated with | ||||||
|  | a {cmd:select or_other} field; otherwise it is {cmd:0}. | ||||||
|  |  | ||||||
|  | {pmore2} | ||||||
|  | For {cmd:geopoint} variables, {cmd:Odk_geopoint} is | ||||||
|  | the variable's {cmd:geopoint} component: | ||||||
|  | {cmd:Latitude}, {cmd:Longitude}, {cmd:Altitude}, or {cmd:Accuracy}. | ||||||
|  | For variables that are not type {cmd:geopoint}, {cmd:Odk_geopoint} is blank. | ||||||
|  |  | ||||||
|  | {phang} | ||||||
|  | {cmd:choices(}{it:choicesfile}{cmd:,} {it:choicesopts}{cmd:)} imports | ||||||
|  | the list metadata from the XLSForm's {it:choices} worksheet. | ||||||
|  | {cmd:choices()} requires {it:choicesfile} to be a comma-separated text file. | ||||||
|  | Strings with embedded commas, double quotes, or end-of-line characters must | ||||||
|  | be enclosed in quotes, and | ||||||
|  | embedded double quotes must be preceded by another double quote. | ||||||
|  |  | ||||||
|  | {pmore} | ||||||
|  | Each attribute in the {it:choices} worksheet has | ||||||
|  | its own column and column header. | ||||||
|  | Use the suboptions {opt listname()}, {opt name()}, and {opt label()} to specify | ||||||
|  | alternative column headers for the {it:list_name}, {it:name}, and | ||||||
|  | {it:label} attributes, respectively. | ||||||
|  | List attributes are imported as value labels. | ||||||
|  |  | ||||||
|  | {pmore} | ||||||
|  | If the {it:choices} worksheet has duplicate column headers, | ||||||
|  | only the first column for each column header is used. | ||||||
|  |  | ||||||
|  | {dlgtab:Fields} | ||||||
|  |  | ||||||
|  | {phang} | ||||||
|  | {opt dropattrib(headers)} specifies the column headers of field attributes that | ||||||
|  | should not be imported as characteristics. | ||||||
|  | {cmd:_all} specifies that all characteristics be dropped. | ||||||
|  |  | ||||||
|  | {phang} | ||||||
|  | {opt keepattrib(headers)} specifies the column headers of | ||||||
|  | field attributes to import as characteristics. | ||||||
|  | {cmd:_all} means all column headers. Other attributes are not imported. | ||||||
|  |  | ||||||
|  | {phang} | ||||||
|  | {opt relax} specifies that fields mentioned in {it:surveyfile} that | ||||||
|  | do not exist in {it:csvfile} be ignored. | ||||||
|  | By default, the do-file attempts to attach the characteristics to | ||||||
|  | these variables, resulting in an error if the variable does not exist. | ||||||
|  | For fields associated with multiple variables, for example, | ||||||
|  | {cmd:geopoint} fields, {opt relax} attempts to attach | ||||||
|  | the characteristics to as many variables as possible: | ||||||
|  | an error does not result if some but not all variables exist. | ||||||
|  |  | ||||||
|  | {dlgtab:Lists} | ||||||
|  |  | ||||||
|  | {phang} | ||||||
|  | {opt other(other)} specifies the Stata value of {cmd:other} values of | ||||||
|  | {cmd:select or_other} fields. | ||||||
|  |  | ||||||
|  | {pmore} | ||||||
|  | {cmd:max}, the default, specifies that the Stata value of {cmd:other} vary by | ||||||
|  | the field's list. | ||||||
|  | For each list, {cmd:other} will be the maximum value of the list plus one. | ||||||
|  |  | ||||||
|  | {pmore} | ||||||
|  | {cmd:min} specifies that the Stata value of {cmd:other} vary by | ||||||
|  | the field's list. | ||||||
|  | For each list, {cmd:other} will be the minimum value of the list minus one. | ||||||
|  |  | ||||||
|  | {pmore} | ||||||
|  | {it:#} specifies a constant value for {cmd:other} that | ||||||
|  | will be used for all lists. | ||||||
|  |  | ||||||
|  | {phang} | ||||||
|  | {opt oneline} specifies that each list's value label definition be written on | ||||||
|  | one line, rather than on multiple using {helpb delimit:#delimit ;}. | ||||||
|  |  | ||||||
|  | {dlgtab:Other} | ||||||
|  |  | ||||||
|  | {phang} | ||||||
|  | {opt replace} specifies that the {cmd:odkmeta} do-file be replaced | ||||||
|  | if it already exists. | ||||||
|  |  | ||||||
|  |  | ||||||
|  | {marker examples}{...} | ||||||
|  | {title:Examples} | ||||||
|  |  | ||||||
|  | {pstd} | ||||||
|  | Create a do-file named {cmd:import.do} that imports ODK data, | ||||||
|  | including the metadata in {cmd:survey.csv} and {cmd:choices.csv} | ||||||
|  | {p_end} | ||||||
|  | {phang2}{cmd} | ||||||
|  | . odkmeta using import.do, | ||||||
|  | csv("ODKexample.csv") survey("survey.csv") choices("choices.csv") | ||||||
|  | {txt} | ||||||
|  |  | ||||||
|  | {pstd} | ||||||
|  | Same as the previous {cmd:odkmeta} command, | ||||||
|  | but specifies that the field {it:name} attribute appears in | ||||||
|  | the {cmd:fieldname} column of {cmd:survey_fieldname.csv} | ||||||
|  | {p_end} | ||||||
|  | {phang2}{cmd} | ||||||
|  | . odkmeta using import.do, | ||||||
|  | csv("ODKexample.csv") survey("survey_fieldname.csv", name(fieldname)) | ||||||
|  | choices("choices.csv") replace | ||||||
|  | {txt} | ||||||
|  |  | ||||||
|  | {pstd} | ||||||
|  | Same as the previous {cmd:odkmeta} command, | ||||||
|  | but specifies that the list {it:name} attribute appears in | ||||||
|  | the {cmd:valuename} column of {cmd:choices_valuename.csv} | ||||||
|  | {p_end} | ||||||
|  | {phang2}{cmd} | ||||||
|  | . odkmeta using import.do, | ||||||
|  | csv("ODKexample.csv") survey("survey_fieldname.csv", name(fieldname)) | ||||||
|  | choices("choices_valuename.csv", name(valuename)) replace | ||||||
|  | {txt} | ||||||
|  |  | ||||||
|  | {pstd} | ||||||
|  | Create a do-file that imports all field attributes except for {it:hint} | ||||||
|  | {p_end} | ||||||
|  | {phang2}{cmd} | ||||||
|  | . odkmeta using import.do, | ||||||
|  | csv("ODKexample.csv") survey("survey.csv") choices("choices.csv") | ||||||
|  | dropattrib(hint) replace | ||||||
|  | {txt} | ||||||
|  |  | ||||||
|  | {pstd} | ||||||
|  | Same as the previous {cmd:odkmeta} command, | ||||||
|  | but does not import any field attributes | ||||||
|  | {p_end} | ||||||
|  | {phang2}{cmd} | ||||||
|  | . odkmeta using import.do, | ||||||
|  | csv("ODKexample.csv") survey("survey.csv") choices("choices.csv") | ||||||
|  | dropattrib(_all) replace | ||||||
|  | {txt} | ||||||
|  |  | ||||||
|  | {pstd} | ||||||
|  | Create a do-file that | ||||||
|  | imports {cmd:other} values of {cmd:select or_other} fields as {cmd:99} | ||||||
|  | {p_end} | ||||||
|  | {phang2}{cmd} | ||||||
|  | . odkmeta using import.do, | ||||||
|  | csv("ODKexample.csv") survey("survey.csv") choices("choices.csv") | ||||||
|  | other(99) replace | ||||||
|  | {txt} | ||||||
|  |  | ||||||
|  |  | ||||||
|  | {marker acknowledgements}{...} | ||||||
|  | {title:Acknowledgements} | ||||||
|  |  | ||||||
|  | {pstd} | ||||||
|  | Lindsey Shaughnessy of Innovations for Poverty Action assisted in | ||||||
|  | almost all aspects of {cmd:odkmeta}'s development. | ||||||
|  | She collaborated on the structure of the program, was a very helpful tester, and | ||||||
|  | contributed information about ODK. | ||||||
|  |  | ||||||
|  |  | ||||||
|  | {marker author}{...} | ||||||
|  | {title:Author} | ||||||
|  |  | ||||||
|  | {pstd}Matthew White, Innovations for Poverty Action{p_end} | ||||||
|  | {pstd}mwhite@poverty-action.org{p_end} | ||||||
		Reference in New Issue
	
	Block a user