docs.sheetjs.com/docz/docs/12-constellation/21-dta.md

91 lines
2.8 KiB
Markdown
Raw Permalink Normal View History

2023-11-13 11:17:25 +00:00
---
title: Stata DTA File Processor
sidebar_label: Stata DTA Codec
hide_table_of_contents: true
---
<head>
2024-03-22 04:45:40 +00:00
<script src="https://cdn.sheetjs.com/dta-0.0.2/package/dist/dta.min.js"></script>
2023-11-13 11:17:25 +00:00
</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.
2024-03-22 04:45:40 +00:00
The SheetJS DTA codec enables websites and automated data pipelines to integrate
2023-11-13 11:17:25 +00:00
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)