(: file: dyn_freq_1var_1year.xq date: 26-July-2010 author: Gary Lewis purpose: Dynamically (ie, at run-time) generates a XQuery program which, when run, produces a frequency distribution for 1 specified variable in 1 specified survey year. usage: Run program from the path where it is located. example: zorba -e year:="1984" -e var:="stabbr" -f -q dyn_freq_1var_1year.xq -o freq_1var_1year.xq -z method=text revision history: date: 27-July-2010 author: Gary Lewis revised: 1. To sort numeric codes as numbers instead of as alphanumerics. :) declare variable $year external; declare variable $var external; let $nl := " ", $dq := """", $dateTime := format-dateTime(current-dateTime(), "[D]-[MNn]-[Y] [H01]:[m01][Pn] [ZN]"), $tmp := text{concat( "(:",$nl, " file: freq_1var_1year.xq",$nl, " date: ",$dateTime,$nl, " author: Program created by dyn_freq_1var_1year.xq",$nl, " purpose: Outputs a frequency distribution for the variable ",$var," in survey year ",$year,".",$nl, " usage: Run this program from its path location.",$nl, " example: zorba -f -q freq_1var_1year.xq -o freq_",$var,"_",$year,".xml -z indent=yes",$nl, ":)",$nl,"",$nl, "",$nl, "{",$nl, "let $x := fn:doc(",$dq,"../xml/metadata/ipedsData.xml",$dq,")/data/file[@year = ",$dq,$year,$dq,"][@type = ",$dq,"xml",$dq,"],",$nl, " $fileName := $x/@name,",$nl, " $path := $x/@path,",$nl, " $xmlFile := concat($path, $fileName)",$nl, "for $i in fn:doc($xmlFile)/data/record/@",$var,$nl, "let $dataType := fn:doc(",$dq,"../xml/metadata/ipedsVars_metadata.xml",$dq,")/variables/var[@name = ",$dq,$var,$dq,"]/detail[@year = ",$dq,$year,$dq,"]/@dataType,",$nl, " $label := fn:doc(",$dq,"../xml/metadata/ipedsVars_metadata_codes.xml",$dq,")/variables/var[@name = ",$dq,$var,$dq,"][@year = ",$dq,$year,$dq,"]/code[@value = $i]/@label,",$nl, " $freq := 1,",$nl, " $sortOrder := if ($dataType = ",$dq,"N",$dq,") then (if ($i = ",$dq,$dq,") then -999 else xs:integer($i)) else $i",$nl, "group by $sortOrder, $label",$nl, "order by $sortOrder", $nl, "return ", "}",$nl, "" )} return $tmp