PROC COMPARE in SAS with PROC SQL and LIBNAME ODBC

PROC COMPARE in SAS with PROC SQL and LIBNAME ODBC
Comparaison des structures de deux tables de base de données access sous SAS.

* la comparaison de deux tables de données est souvent utile quand on a plusieurs versions
des tables. Elle permet de s'assurer de l'intégrité des tables pour assurer une migration propre de données. Cette procédure est utile dans la préparation des tables pour le passage d'un SIG *

Ici nous couplons l'utilisation des fonctions ou astuces suivantes:
- 1. l'ouverture de librairie ODBC sous SAS pour l'accès à toutes les tables d'un fichier ACCESS par
exemple
- 2. L'utilisation d'une Procédure SQL pour la création de deux tables vides à comparer

- 3. Couplage avec une fonction Macro pour traiter plusieurs tables dans la procédure

- 4. Et sortie des résultats dans un fichier PDF.

/* Dans l'exemple, les tables à comparer sont table_A table_B table_C soit 3 tables dans chacune des deux bases de données Base_1 et Base_2;*/
*TITLE 'Comparison between two tables';
/*
/ Program : compare.sas
/ Version : 1.0
/ Author : Bakary Djaby
/ University: Universite de Liège (Belgium)
/ Date : 2009
/ Purpose : Compare two datasets from ACCESS table
/ SubMacros : none
/ Notes : Output is in Pdf format
/ Usage : Crop growth modelling, GIS mapping control, Data mining */

/* Créer deux DNS pour les Base_1 et base_2 avec le gestionnaire ODBC de votre système d'exploitation;*/
/* Les noms DSN sont les mêmes que les tables */
/* Création des librairies pour les deux bases */
Libname Base_1 odbc dsn="Base_1"; run;
Libname Base_2 odbc dsn="Base_2"; run;
/* Invitation de sortie des résultats dans un fichier résultat PDF nommé par exemple comp.pdf dans c:\temp */
Ods pdf file='c:\temp\comp.pdf';
/* macro pour comparer les trois tables en même temps des deux bases */
%macro comparetable;
%let nomdefichier_= table_A table_B table_C;
%do i = 1 %to 3;
/* Utilisation de la procédure SQL pour créer des tables vides */
/* les nouvelles tables portent _1 devant le nom
proc sql;create table Base_1.%scan(&nomdefichier_,&i)_1 like Base_1.%scan(&nomdefichier_,&i);
proc sql;create table Base_2.%scan(&nomdefichier_,&i)_1 like Base_2.%scan(&nomdefichier_,&i);
/* L'option Listall dans proc compare me permet de comparer dans les deux sens.*/
/* Les deux tables sont vides, donc la comparaison porte seulement sur les variables */
proc compare data=Base_1.%scan(&nomdefichier_,&i)_1 compare=Base_2.%scan(&nomdefichier_,&i)_1 listall;
/* le titre prend aussi le nom de la table pour faciliter la lecture des résultats */
title1 "Différence entre deux tables %scan(&nomdefichier_,&i)";
%end;
run;
quit;
%mend;
%comparetable
/*Pour comparer autant de tables, il faut inclure leur nom dans la variable nomdefichier et incrémenter i.*/

Commentaires

Posts les plus consultés de ce blog

EXTRACTION DE CARACTERE A DROITE DANS UNE VARIABLE SAS