运行代码时没有任何事情发生

时间:2017-10-28 19:38:59

标签: sas

有没有其他人有这个问题?基本上,有时当我编写宏并运行代码时,没有任何反应。日志只是将您尝试以黑色执行的代码写入,但是像SAS一样被禁用,您必须关闭SAS并在再次正常运行之前将其重新打开。有没有办法解决这个问题而不必关闭sas。

这是我的代码:

dm 'clear log';                                                                                                                                                                
dm 'clear output';                                                                                                                                                             
dm 'odsresults: clear';                                                                                                                                                        
libname projet 'C:\Users\MJ-INFO\Desktop\Projet scoring1' ;                                                                                                                    
/*Extrcation de la base d'etude et creation d'une copie*/                                                                                                                      
data Examen ;                                                                                                                                                                  
set projet.base_resiliation_proj ;                                                                                                                                             
run;                                                                                                                                                                           

/*Contenu de la base*/                                                                                                                                                         
proc contents data=Examen;                                                                                                                                                     
run;                                                                                                                                                                           
/*Corespondance entre les formats et les variables */                                                                                                                          

proc format ;                                                                                                                                                                  
value $sexe                                                                                                                                                                    
"1"="homme"                                                                                                                                                                    
"2"="femme";                                                                                                                                                                   
run;                                                                                                                                                                           
/*Applicatation des formats*/                                                                                                                                                  
data Examen;                                                                                                                                                                   
set projet.base_resiliation_proj ;                                                                                                                                             
format sexe $sexe.;                                                                                                                                                            
run ;                                                                                                                                                                          

/*Nous avons 53892 observations et 8 variables dans notre base*/                                                                                                               

/*Definition de la variable à expliquer *                                                                                                                                      
%let var_cible=RESIL;                                                                                                                                                          

/*Definition des variables explicatives */                                                                                                                                     
%let var_quali=formule sexe;                                                                                                                                                   
%let var_quanti=anc_client anc_cont cotisation id nb_cont;                                                                                                                     
/*Vue sur la variable cible*/                                                                                                                                                  
proc freq data=Examen;                                                                                                                                                         
table &var_cible;                                                                                                                                                              
run;                                                                                                                                                                           
/*14.42 des contrats sont des fragiles*/                                                                                                                                       
/*Exploration des variables candidates  de la base*/                                                                                                                           
proc freq data=Examen;                                                                                                                                                         
table &var_quali;                                                                                                                                                              
run;                                                                                                                                                                           

proc means data=Examen min max mean median nmiss;                                                                                                                              
var &var_quanti;                                                                                                                                                               
run;                                                                                                                                                                           

/*Traitement des valeurs manquantes/aberrantes*/                                                                                                                               
data Examen;                                                                                                                                                                   
set Examen;                                                                                                                                                                    
if cotisation=-1 then delete;                                                                                                                                                  
if cotisation='.' then delete;                                                                                                                                                 
if nb_cont=99999 then delete;                                                                                                                                                  
run;                                                                                                                                                                           

/*II.Preparation des donnees*/                                                                                                                                                 
/*Etude des liaisons entre variables qualitatives et variable cible */                                                                                                         
/*Variables qualitatives : test de Khi-2 & v de Cramer*/                                                                                                                       
%macro quali(table,var,cible,mod);                                                                                                                                             
/*Representation en terme d'effectif*/                                                                                                                                         
proc gchart data=&table;                                                                                                                                                       
vbar3d &var. / sumvar=&cible discrete;                                                                                                                                         
title "Effectifs de la variable &var";                                                                                                                                         
run;                                                                                                                                                                           
/*Taux de contrat à risque*                                                                                                                                                    
proc freq data=&table;                                                                                                                                                         
table &var.*&cible / chisq outpct out=pct;                                                                                                                                     
run;                                                                                                                                                                           
proc gchart data=pct (where=(&cible=&mod));                                                                                                                                    
vbar3d &var. / sumvar=pct_row discrete;                                                                                                                                        
title "Taux de contrats à risque de la variable &var";                                                                                                                         
run;                                                                                                                                                                           
quit;                                                                                                                                                                          
title;                                                                                                                                                                         
%mend;                                                                                                                                                                         
%quali(Examen,sexe,&var_cible,1);

Sas通过运行此代码向我显示黑色执行:

/*II.Preparation des donnees*/                                                                                                                                                 
/*Etude des liaisons entre variables qualitatives et variable cible */                                                                                                         
/*Variables qualitatives : test de Khi-2 & v de Cramer*/                                                                                                                       
%macro quali(table,var,cible,mod);                                                                                                                                             
/*Representation en terme d'effectif*/                                                                                                                                         
proc gchart data=&table;                                                                                                                                                       
vbar3d &var. / sumvar=&cible discrete;                                                                                                                                         
title "Effectifs de la variable &var";                                                                                                                                         
run;                                 

当我看到日志页面时,即使我的代码没有错误,我也不明白为什么我会执行黑色操作?

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

您的代码:

%macro quali(table,var,cible,mod);                                                                                                                                             
/*Representation en terme d'effectif*/                                                                                                                                         
proc gchart data=&table;                                                                                                                                                       
vbar3d &var. / sumvar=&cible discrete;                                                                                                                                         
title "Effectifs de la variable &var";                                                                                                                                         
run;        

开始定义宏但从未完成。最后没有%mend语句,所以SAS认为你仍然发送宏代码进行编译。如果你添加%修补,它应该工作。

SAS以这种方式感觉无响应的最常见原因是未公开的宏定义,未关闭的注释块和无与伦比的引号。如果你google" SAS magic string"您将找到可以提交的代码示例,以便在遇到这种情况时尝试恢复。像:

*';*";*/;%mend;

如果您使用的是Enterprise Guide,则每次提交代码时都会自动添加一个魔术字符串。这意味着您的会话不会感到被挂起。但是如果你有一个未闭合的宏定义,它可能会让它更难识别,因为看起来好像一切都很好。但实际上它根本没有执行。神奇的字符串最终可能会隐藏问题。我假设SAS工作室也添加了一个魔术字符串,但我还没有检查过。