2011-04-14 4 views
5

Je veux tester si une variable existe et si ce n'est pas le cas, créez-la.Test si une variable existe

+0

Vous ne pouvez pas vraiment créer une variable de manière conditionnelle dans une étape DATA. Peut-être voulez-vous écrire du code qui vérifie si un ensemble de données a une variable particulière, et sinon utilisez une étape DATA pour créer une nouvelle version de l'ensemble de données qui ajoute la colonne requise et lui donne une valeur par défaut raisonnable? –

+0

Une meilleure solution pourrait être 'abort;' si les données d'entrée ne satisfont pas les spécifications. – StasK

Répondre

8

Les fonctions open() & varnum() peuvent être utilisées. La sortie non nulle de varnum() indique que la variable existe.

data try; 
    input var1 var2 var3; 
    datalines; 
    7 2 2 
    5 5 3 
    7 2 7 
; 

data try2; 
    set try; 
    if _n_ = 1 then do; 
     dsid=open('try'); 
     if varnum(dsid,'var4') = 0 then var4 = .; 
     rc=close(dsid); 
    end; 
    drop rc dsid;  
run; 
+2

N'oubliez pas de 'close()' votre fichier après l'avoir ouvert avec la fonction 'open()'. – cmjohns

+2

L'ouverture et le varnum ne sont pas nécessaires ici sont-ils? Ne pouvez-vous pas simplement dire "data try2; var4 =; set try;". Dans l'exemple donné, il fera l'ouverture et varnum à chaque itération, plutôt inefficace, donc ils devraient au moins être gardés par "si _N_ = 1 alors". –

+2

J'ai besoin de tester que var4 existe pour que si son contenu est préservé. La proposition 'data try2; var4 = .; set try; 'écraserait toutes les données dans une variable préexistante. – Murray

5
data try2; 
    set try; 
    var4 = coalesce(var4,.); 
run; 

(en supposant var4 est numérique)

1

Assigner var4 à lui-même. L'affectation va créer la variable si elle n'existe pas et laisser le contenu en place si c'est le cas.

data try; 
    input var1 var2 var3; 
    datalines; 
    7 2 2 
    5 5 3 
    7 2 7 
; 

data try2; 
    set try; 
    var4 = var4; 
run; 

Rappelez-vous simplement que la création var4 de cette façon quand il n'existe pas utilisera les attributs variables par défaut, vous devrez peut-être utiliser une instruction explicite attrib si vous avez besoin de mise en forme/longueur spécifique, etc.

0

C'est une réponse/un commentaire très en retard, mais cette méthode fonctionne pour moi et est assez simple (SAS 9.4). Dans l'exemple ci-dessous, j'ai utilisé des variables numériques et caractères manquantes et une valeur affectée à la variable de caractère manquante est manquante.

data try; 
input var1 var2 var3; 
datalines; 
7 2 2 
5 5 3 
7 2 7 
; 

    data try2; 
length var4 $20; 
length var5 8; 
set try; 
var4 = var4; 
if var4 = ' ' then var4 = 'Not on Source File'; 
run; 
+0

Ceci est la même réponse que la réponse précédente de AndyBean – Snorex

+0

Pas si Muray veut être informet de la non-existence de la variable sur le Deataset intput! –

Questions connexes