Memorizzazione dei dati SAS (inclusa la struttura della tabella) in un singolo file flat

StackOverflow https://stackoverflow.com/questions/119929

  •  02-07-2019
  •  | 
  •  

Domanda

Devo convertire le tabelle di dati SAS in file flat (o " file ASCII " come venivano chiamati una volta, al contrario dei file binari). E solo un file flat per ogni tabella SAS originale. La cosa difficile è che voglio che il file flat contenga anche alcune informazioni strutturali della tabella SAS originale, in particolare:

  • Nome variabile / colonna
  • Etichetta variabile / colonna
  • Tipo di variabile / colonna
  • Lunghezza variabile / colonna
  • Formato variabile / colonna
  • Informazioni sulla variabile / colonna

Informazioni aggiuntive:

  • Avrò solo bisogno di convertire piccoli dati (< 100 obs).
  • Le prestazioni non sono un problema (entro limiti ragionevoli).
  • Il file flat dovrebbe costituire una base per ricreare la tabella SAS originale, non ho bisogno di essere in grado di utilizzare il file direttamente come tabella nelle fasi DATA o PROC.

Le tabelle SAS standard, i file di trasporto, i file XPORT, ecc. sono tutti file in formato binario e il formato di tabella XML standard nei file SAS e CSV non conserva la struttura della tabella. Quindi ovviamente queste opzioni non aiutano.

Qual è la mia migliore opzione?

È stato utile?

Soluzione

Non sono a conoscenza di soluzioni facili.

Possibilmente:

  1. Utilizzare PROC EXPORT per produrre un file CSV con i dati al suo interno.
  2. Utilizzare PROC DATASETS con ODS per produrre un set di dati con nomi, tipi, ecc.
  3. Produci un altro file CSV per questo set di dati.

Ora hai la descrizione ASCII della tabella (suddivisa in due file CSV). Invertire il processo sarebbe più complicato. Fondamentalmente dovresti leggere nel set di dati di descrizione, quindi utilizzare CALL SYMPUT in un ciclo per creare un gruppo di variabili macro con le informazioni in esse contenute, quindi utilizzare le variabili macro per creare un IMPORT IMPORT per il file CSV ...

Altri suggerimenti

  1. Crea il codice per esportare la tabella in testo (questo è semplice, basta cercarlo su Google o guardare "The Little SAS Book" se ne hai una copia).

  2. Quindi aggiungi le informazioni "meta" da sashelp.vcolumn, dove è dove sas memorizza le informazioni (metadati) sui set di dati sas. È una tabella sas stessa, quindi è possibile eseguire un'operazione di unione proc sql per unirla alle colonne effettive descritte in questa tabella (anche se sarà necessario eseguire un'operazione di tipo trasposizione poiché i metadati sulle colonne sono in righe, non in colonne ).

Non sei del tutto preciso su come vuoi vedere i metadati nel file di testo, quindi per quanto posso andare.

La sintassi descrittiva di proc sql potrebbe essere utile per ottenere la porzione di metadati, inclusi lunghezze, tipi, formati, indici ecc ...

Codice:

proc sql;
describe table sashelp.class;
quit;

Log:

NOTE: SQL table SASHELP.CLASS was created like:

create table SASHELP.CLASS( bufsize=4096 )
  (
   Name char(8),
   Sex char(1),
   Age num,
   Height num,
   Weight num
  );

Con SAS 9.2, puoi creare un file XML da un set di dati e l'XML contiene metadati di variabili / colonne, come formato, etichetta, ecc ... Vedi la sezione del motore LIBNAME XML di SAS 9.2: Guida per l'utente intitolata < !> quot; Utilizzo del motore XML per il trasporto di set di dati SAS negli ambienti operativi " ;. Un link ad esso è qui:

http://support.sas .com / documentazione / CDL / it / engxml / 61740 / HTML / default / a002594382.htm

Ecco una sezione di codice dal manuale che mostra l'uso del motore libname XML92 e PROC COPY per creare l'XML:

libname myfiles 'SAS-library';
libname trans xml92 'XML-document' xmltype=export;
proc copy in=myfiles out=trans;
   select class;
run;

In SAS 9.1.3, potrebbe essere necessario creare un tagset personalizzato per ottenere la stessa operazione. Il supporto tecnico SAS (support@sas.com) potrebbe essere in grado di offrire un aiuto.

A proposito: non hai detto perché devi farlo. In questo caso, non esiste una buona ragione (potrebbe esserci una ragione convincente, come qualcuno con potere dicendo "fallo, o fatti licenziare", ma non c'è un buon motivo).

Rinuncerei all'idea di unire metadati e dati in ciascun file, a meno che non ci siano delle ragioni incredibilmente forti per farlo. Procedere con l'esportazione dei metadati per il set di dati A in un file chiamato metadata_A; questo comporterà file accoppiati. Chiunque cerchi di usare quei file in un programma di database o in un programma statistico avrebbe un file di metadati chiaramente etichettato con cui lavorare.

Se utilizzerai solo i dati in SAS, puoi semplicemente utilizzare PROC COPY per creare file di trasporto:

http://www.usc.edu/isd/doc/ statistiche / sas / sastransport /

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top