Stockage des données SAS (y compris la structure de la table) dans un seul fichier plat

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

  •  02-07-2019
  •  | 
  •  

Question

Je dois convertir les tables de données SAS en fichiers plats (ou " fichiers ASCII " comme ils ont été appelés une fois, par opposition aux fichiers binaires). Et un seul fichier plat pour chaque table SAS d'origine. Le problème, c’est que je souhaite que le fichier plat contienne également certaines informations structurelles de la table SAS originale, notamment:

  • Nom de la variable / colonne
  • Libellé de la variable / colonne
  • Type de variable / colonne
  • Longueur de la variable / colonne
  • Format de variable / colonne
  • Variable / Column informat

Informations complémentaires:

  • Je n'aurai besoin que de convertir de petites données (< 100 obs).
  • Les performances ne sont pas un problème (dans des limites raisonnables).
  • Le fichier plat doit constituer une base pour recréer la table SAS d'origine. Je n'ai pas besoin de pouvoir utiliser le fichier directement comme table dans les étapes DATA ou PROC.

Les tables SAS standard, les fichiers de transport, les fichiers XPORT, etc. sont tous des fichiers au format binaire, et le format de table XML standard dans les fichiers SAS et CSV ne conserve pas la structure de la table. Alors, évidemment, ces options ne vous aident pas.

Quelle est ma meilleure option?

Était-ce utile?

La solution

Je ne connais aucune solution facile.

éventuellement:

  1. Utilisez PROC EXPORT pour générer un fichier CSV contenant les données qu'il contient.
  2. Utilisez PROC DATASETS avec ODS pour produire un jeu de données avec les noms, types, etc.
  3. Produit un autre fichier CSV pour cet ensemble de données.

Vous avez maintenant votre description ASCII de la table (répartie sur deux fichiers CSV). Inverser le processus serait plus délicat. Fondamentalement, vous devez lire le fichier de description, puis utiliser CALL SYMPUT dans une boucle pour créer un groupe de variables de macro avec les informations qu’elles contiennent, puis utiliser vos variables de macro pour créer un PROC IMPORT pour le fichier CSV ...

Autres conseils

  1. Créez le code pour exporter le tableau en texte (ceci est simple, il suffit de le rechercher sur Google ou de consulter "Le petit livre SAS" si vous en avez une copie).

  2. Ensuite, ajoutez les informations 'méta' de sashelp.vcolumn, où sas stocke les informations (métadonnées) relatives aux jeux de données sas. C'est une table sas elle-même, vous pouvez donc effectuer une opération proc sql union pour l'associer aux colonnes décrites dans cette table (bien que vous deviez effectuer une opération de type transpose car les métadonnées sur les colonnes sont en lignes et non en colonnes ).

Vous n'êtes pas tout à fait précis sur la façon dont vous souhaitez voir les métadonnées dans le fichier texte, c'est donc aussi loin que je peux aller.

La syntaxe de description de proc sql peut être pratique pour obtenir la partie métadonnée, y compris les longueurs, les types, les formats, les index, etc.

Code:

proc sql;
describe table sashelp.class;
quit;

Journal:

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

Avec SAS 9.2, vous pouvez créer un fichier XML à partir d'un ensemble de données. XML contient des métadonnées de variable / colonne, telles que le format, l'étiquette, etc. Voir la section du moteur SAS 9.2 XML LIBNAME Engine intitulée < !> "Utilisation du moteur XML pour transporter des ensembles de données SAS dans des environnements d’exploitation &"; Un lien vers celui-ci est ici:

http://support.sas .com / documentation / cdl / fr / engxml / 61740 / HTML / default / a002594382.htm

Voici une section de code du manuel qui montre l'utilisation du moteur XML92 libname et de PROC COPY pour créer le code XML:

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

Dans SAS 9.1.3, vous devrez peut-être créer un jeu d’étiquettes personnalisé pour obtenir la même opération. Le support technique SAS (support@sas.com) pourra peut-être vous aider.

BTW - vous n'avez pas dit pourquoi vous deviez le faire. Dans ce cas, il n'y a pas de bonne raison (il peut y avoir une raison impérieuse, telle que quelqu'un avec le pouvoir disant "fais-le ou sois viré", mais il n'y a pas de bonne raison).

Je renoncerais à l'idée de fusionner les métadonnées et les données de chaque fichier, à moins qu'il y ait une raison extrêmement forte de le faire. Commencez par exporter les métadonnées de l'ensemble de données A dans un fichier appelé métadonnées_A; cela entraînera des fichiers jumelés. Toute personne souhaitant utiliser ces fichiers dans un programme de base de données ou un programme statistique disposerait d'un fichier de métadonnées clairement libellé.

Si vous n'utilisez que les données dans SAS, vous pouvez simplement utiliser PROC COPY pour créer des fichiers de transport:

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top