91 lines
2.7 KiB
Markdown
91 lines
2.7 KiB
Markdown
|
---
|
||
|
title: Stata DTA File Processor
|
||
|
sidebar_label: Stata DTA Codec
|
||
|
hide_table_of_contents: true
|
||
|
---
|
||
|
|
||
|
<head>
|
||
|
<script src="/dta/dta.min.js"></script>
|
||
|
</head>
|
||
|
|
||
|
:::info pass
|
||
|
|
||
|
This discussion focuses on the Stata DTA codec. For integrating SheetJS in a
|
||
|
Stata extension, there is a [dedicated demo](/docs/demos/extensions/stata).
|
||
|
|
||
|
:::
|
||
|
|
||
|
[Stata](https://stata.com/) is a statistical software package. Econometricians
|
||
|
and social scientists have used Stata for data processing and statistical
|
||
|
analysis. Many legacy datasets are only available in Stata DTA data files.
|
||
|
|
||
|
The SheetJS DTA Codec enables websites and automated data pipelines to integrate
|
||
|
data from DTA files.
|
||
|
|
||
|
Source code and project documentation are hosted on the SheetJS git server at
|
||
|
<https://git.sheetjs.com/sheetjs/sheetjs/src/branch/master/packages/dta>
|
||
|
|
||
|
:::caution DTA support is considered experimental.
|
||
|
|
||
|
Great open source software grows with user tests and reports. Issues should be
|
||
|
reported to [the issue tracker](https://git.sheetjs.com/sheetjs/sheetjs/issues).
|
||
|
|
||
|
:::
|
||
|
|
||
|
## Live Demo
|
||
|
|
||
|
This demo fetches a [sample DTA file](pathname:///dta/pres.dta), parses the data
|
||
|
using the SheetJS DTA Codec and displays the data in an HTML table using the
|
||
|
`sheet_to_html` method[^1].
|
||
|
|
||
|
:::tip pass
|
||
|
|
||
|
The file input element can be used to parse a file on your computer.
|
||
|
|
||
|
**All work is performed in the web browser! Data never leaves your machine!**
|
||
|
|
||
|
If you find any unexpected results or errors in testing, please report an issue
|
||
|
at [the issue tracker](https://git.sheetjs.com/sheetjs/sheetjs/issues).
|
||
|
|
||
|
:::
|
||
|
|
||
|
```jsx live
|
||
|
function SheetJSDTA() {
|
||
|
const [__html, setHTML] = React.useState("");
|
||
|
const [text, setText] = React.useState("");
|
||
|
|
||
|
const process = (u8) => {
|
||
|
try {
|
||
|
/* Initial Setup */
|
||
|
if(typeof DTA == "undefined") return setText("ERROR: Reload this page!");
|
||
|
DTA.set_utils(XLSX.utils);
|
||
|
|
||
|
/* Parse DTA */
|
||
|
const wb = DTA.parse(u8);
|
||
|
|
||
|
/* Generate HTML */
|
||
|
setHTML(XLSX.utils.sheet_to_html(wb.Sheets[wb.SheetNames[0]]));
|
||
|
setText("");
|
||
|
} catch(e) { setText("ERROR: " + (e && e.message || e)); }
|
||
|
};
|
||
|
|
||
|
React.useEffect(() => { (async() => {
|
||
|
/* Fetch file */
|
||
|
process(new Uint8Array(await (await fetch("/dta/pres.dta")).arrayBuffer()));
|
||
|
})(); }, []);
|
||
|
const goodstyle = { backgroundColor: "#C6EFCE", color: "#006100" };
|
||
|
const badstyle = { backgroundColor: "#FFC7CE", color: "#9C0006" };
|
||
|
|
||
|
return ( <>
|
||
|
{/* Import Button */}
|
||
|
<input type="file" onChange={async(e) => {
|
||
|
process(new Uint8Array(await e.target.files[0].arrayBuffer()));
|
||
|
}}/>
|
||
|
{text && <code style={/ERROR/.test(text)?badstyle:goodstyle}>{text}</code>}
|
||
|
<div dangerouslySetInnerHTML={{ __html }}/>
|
||
|
</> );
|
||
|
}
|
||
|
```
|
||
|
|
||
|
[^1]: See [`sheet_to_html` in "Utilities"](/docs/api/utilities/html#html-table-output)
|