mardi 25 octobre 2011

Conversion des dates entre SAS et EXCEL

Le 1 janvier 1960 est le jour 0 dans le calendrier SAS et le jour  21 916 dans le Calendrier Excel.
- Ajouter 21916 pour convertir une date Excel en SAS.
- Soustraire 21 916 pour convertir une date de SAS vers Excel
- Si les dates Excel sont importées en SAS avec un format numérique, soustrayez 21916 à ce nombre et donnez à ce champ SAS un format  date.
Dans  Excel une date peut être représentée dans n'importe quelle langue, n'importe quel format, mais en réalité se sont des entiers.

jeudi 2 décembre 2010

Créer un ensemble de macro variables avec SQL: sysmaxlong

La variable macro & sysmaxlong permet de créer l'élément  supérieure de la  macro, c'est à dire que l'élément n-ième est créé, correspondant au nombre maximum de lignes dans la table.
 
   proc sql noprint;
      select distinct ville
             into :ville-ville&sysmaxlong.
        from monfichier;
          %let n_ville = &sqlobs;
     quit;

     %do i = 1 %to &n_ville;
        &&&ville&i;
     %end;

Lire un champ de plus de 1024 chr


Dans SAS la limite maximum par défaut d'un champ caractère est de 1024,
Pour lire un champ plus long depuis une base de donnée il faut employer l’option DBMAX_TEXT=4096  maximum 32767



LIBNAME Malib ODBC  DATASRC=MaSource  SCHEMA=dbo  USER=dwh001  PASSWORD= xxxx DBMAX_TEXT=3264 ;

mercredi 17 novembre 2010

Comment définir la position d'une colonne dans une table sas existante

Les commandes KEEP ou DROP ne change pas l'ordre des attributs, il faut donc créer une nouvelle table.
Le plus simple et le plus rapide c'est de créer une nouvelle table en SQL, ainsi les attributs hériteront des longueurs, format et label de la table originale.

proc sql;
 create table matable
 as select nom, prenom, dnaiss,naff,ncon,rm
 from anciennetable
;

Lire le contenu d'un dossier

Lecture du directory des jobs déployé en SAS DI, sans employé de commande externe, la table comporte 2 champs l’un avec le nom du programme et l’autre le contenu de chaque ligne de programme.


filename monfich "E:\SAS\backtier\Lev1\SASApp\SASEnvironment\SASCode\Jobs\*.sas";
data Lectdir;
  length filename $256 sasfile $64;
  retain sasfile;
  infile monfich filename=filename eov=eov length=L;
  input line $varying256. l;  
  if _n_ eq 1 or eov then do;
   sasfile = scan(filename,-2,'.\');
   eov  = 0;
  end;
 run;