2016-02-16 1 views
0

je le code suivant:valeurs manquantes proc tabulate SAS

ods tagsets.excelxp file = 'G:\CPS\myworkwithoutmissing.xml' 
style = printer; 
proc tabulate data = final; 
Class Year Self_Emp_Inc Self_Emp_Uninc Self_Emp Multi_Job P_Occupation Full_Part_Time_Status; 
table Year, P_Occupation*n; 
table Year, (P_Occupation*Self_Emp_Inc)*n; 
table Year, (Self_Emp_Inc*P_Occupation)*n; 
run; 
ods tagsets.excelxp close; 

Quand je lance ce code, je reçois le message d'erreur suivant:

WARNING: A class, frequency, or weight variable is missing on every observation. 
WARNING: A class, frequency, or weight variable is missing on every observation. 
WARNING: A class, frequency, or weight variable is missing on every observation. 

maintenant afin de contourner ce problème, je ajouter l'option "manquant" à la fin de la déclaration de classe telle que:

class year self_emp_inc ....... Full_Part_Time_Status/ missing; 

Ceci résout le problème en ce qu'il ne donne pas moi le message d'erreur et crée la table. Cependant, mon tableau compte maintenant le nombre de valeurs manquantes, quelque chose que je ne veux pas. Par exemple ma variable self_emp_inc a les valeurs 1 et. Maintenant, quand j'exécute le code avec l'option manquante, j'obtiens aussi un compte de P_Occupation pour toutes les valeurs manquantes, mais je ne veux que le compte pour quand la valeur de self_emp_Inc est 1. Comment puis-je accomplir cette tâche?

+0

Je ne peux pas essayer ceci donc je commenterai pour le moment. Vous pouvez avoir plusieurs instructions CLASS et ne manquer que les valeurs d'intérêt. Vous pouvez également utiliser une instruction WHERE pour limiter votre analyse. – Reeza

+0

En fait, j'ai seulement utilisé l'option "manquant" pour voir si cela résout le problème. Je pense que proc tabuler par défaut ignore les valeurs manquantes, mais cela semble être un problème dans ce cas. Pas certain de pourquoi. Je veux vraiment ignorer la valeur manquante dans tous les cas et dans toutes les variables. – user2916331

+0

La tabulation Proc exclut les cas dans la liste. Toute variable listée ayant une valeur manquante entraîne l'exclusion de l'observation de toute analyse. – Reeza

Répondre

1

Il s'agit d'une de ces choses frustrantes dans SAS qui, pour une raison quelconque, ne nous a pas donné une "bonne" option pour contourner le problème. En fonction de ce que vous travaillez, il y a quelques solutions.

Le vrai problème ici n'est pas que vous avez manques - dans une table 1x1 (1 var par 1 var), excluant les ratés est ce que vous voulez. C'est parce que vous appelez plusieurs tables et que chaque table est affectée par des erreurs dans les variables de classe de l'autre table. En tant que tel, la réponse la plus simple est souvent de diviser les tables en plusieurs instructions proc tabulate. Cela peut parfois être trop compliqué ou trop onéreux en terme d'exécution, mais je pense que la plupart du temps c'est la meilleure solution - c'est souvent pour moi, de toute façon.

Étant donné que vous ne travaillez qu'avec n, vous pouvez construire la tabulation avec les données manquantes, les exporter vers un ensemble de données, les filtrer puis les réimprimer ou les exporter. C'est la solution la plus simple, typiquement.

Comment exactement vous voulez faire cela dépend bien sûr de ce que vous voulez exactement. Par exemple:

data test_cars; 
    set sashelp.cars; 
    if _n_=5 then call missing(make); 
    if _n_=7 then call missing(model); 
    if _n_=10 then call missing(type); 
    if _n_=13 then call missing(origin); 
run; 

proc tabulate data=test_cars out=test_tabulate(rename=n=count); 
    class make model type origin/missing; 
    tables (make model type),origin*n; 
run; 

data test_tabulate_want; 
    set test_tabulate; 
    if cmiss(of make model type origin)>2 then delete; 
    length colvar $200; 
    colvar = coalescec(of make model type); 
run; 

proc tabulate data=test_tabulate_want missing; 
    class colvar origin/order=data; 
    var count; 
    tables colvar,origin*count*sum; 
run; 

Ce n'est pas parfait, mais il peut être beaucoup mieux avec un peu plus de travail sur la mise en forme - c'est juste un exemple rapide.

Si vous utilisez des pourcentages, bien sûr, cela ne fonctionne pas exactement. Vous devez soit refactoriser les pourcentages dans cette étape de données - ce qui est un peu de travail, mais faisable - ou vous avez besoin de tableaux séparés pour chaque variable de classe.

+0

Merci beaucoup Joe. Malheureusement, je dois calculer les pourcentages.Mais cela me donne d'autres idées. Très appréciée! – user2916331