Armazenamento de dados SAS (incluindo a estrutura da tabela) em um único arquivo plano

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

  •  02-07-2019
  •  | 
  •  

Pergunta

Eu preciso converter tabelas de dados SAS em arquivos simples (ou "arquivos ASCII", como eram chamados uma vez, ao contrário de arquivos binários). E apenas um arquivo plano para cada tabela SAS originais. A coisa desafio é que eu quero que o arquivo plano para conter algumas informações estruturais da tabela SAS original também, especificamente:

  • Variable name / Coluna
  • / label coluna Variable
  • Variável / Tipo de coluna
  • Variável comprimento / coluna
  • formato Variable / coluna
  • Variável / coluna informat

Informações adicionais:

  • Eu só precisará converter pequenos de dados (<100 obs).
  • O desempenho não é um problema (dentro de limites razoáveis).
  • O arquivo plano deve formar uma base para recriar a tabela SAS original, eu não preciso de ser capaz de usar o arquivo diretamente como uma tabela no DATA ou passos Proc.

As tabelas SAS padrão, os arquivos de transporte, arquivos xPort, etc, são todos os arquivos de formato binário, e o formato de tabela XML padrão em SAS e CSV-arquivos não preservar a estrutura da tabela. Então, obviamente, estas opções não ajuda.

O que é a minha melhor opção?

Foi útil?

Solução

Eu não estou ciente de quaisquer soluções fáceis.

Possivelmente:

  1. Use PROC Exportar para arquivo CSV produto com os dados nele.
  2. DATASETS Use PROC com ODS para produzir um conjunto de dados com os nomes, tipos, etc.
  3. Produzir outro arquivo CSV para este conjunto de dados.

Agora você tem sua descrição ASCII da tabela (distribuídos por dois arquivos CSV). Invertendo o processo seria mais complicado. Basicamente, você teria que ler no conjunto de descrição de dados, em seguida, usar a chamada SYMPUT em um loop para criar um monte de variáveis ??macro com as informações neles, então use suas variáveis ??macro para construir um IMPORT PROC para o arquivo CSV ...

Outras dicas

  1. Criar o código para exportar a tabela para texto (isto é simples, apenas google-lo ou olhar para 'The Little SAS Livro' se você tem uma cópia).

  2. Em seguida, acrescentar a 'meta' informações sashelp.vcolumn, que é onde sas armazena informações (metadados) sobre sas conjuntos de dados. É uma tabela sas em si, de modo que você poderia fazer uma operação proc sql união para se juntar com as colunas reais que esta tabela descreve (embora você vai precisar fazer uma operação do tipo transposição porque os metadados sobre as colunas é em filas, não colunas ).

Você não está sendo completamente específicas sobre como você deseja ver os dados de meta no arquivo de texto, de modo que é tanto quanto eu posso ir.

O proc sql descrever sintaxe pode ser útil para obter a parte de metadados, incluindo comprimentos, tipos, formatos, índices etc ...

Código:

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
  );

Com SAS 9.2, você pode criar um arquivo XML a partir de um conjunto de dados e o XML contém metadados variável / coluna, como formato, rótulo, etc ... Veja a seção do libname Motor SAS 9.2 XML: Guia do Usuário intitulado " usando o motor de XML para conjuntos de transporte SAS de dados em ambientes de operação". Um link para ele é aqui:

http://support.sas .com / documentation / CDL / en / engxml / 61740 / HTML / default / a002594382.htm

Aqui está uma seção de código do manual que mostra o uso do motor XML92 libname e PROC COPY para criar o XML:

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

Em SAS 9.1.3, você pode ter que criar uma tagset personalizada para obter a mesma operação. Suporte Técnico SAS (support@sas.com) pode ser capaz de oferecer alguma ajuda.

BTW - você não disse por que você precisa para fazer isso. Neste caso, não há nenhuma boa razão (pode haver uma razão convincente, como alguém com poder dizendo 'fazê-lo, ou ser despedido', mas não há nenhuma boa razão).

Eu daria a idéia de fundir os metadados e dados em cada arquivo, a menos que haja algum incrivelmente forte razão para fazê-lo. Ir com a exportação os metadados para conjuntos de dados A em um arquivo chamado metadata_A; isso irá resultar em arquivos emparelhados. Qualquer pessoa olhando para usar esses arquivos em um programa de banco de dados ou programa estatístico teria um arquivo de metadados claramente marcado para trabalhar.

Se você está indo só para usar os dados em SAS, então você pode apenas usar PROC cópia para tornar arquivos de transporte:

http://www.usc.edu/isd/doc/ estatísticas / sas / sastransport /

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top