/* DATA step to create the SASUSER.CLASS data set */
data sasuser.class(label='Student information');
input name $ 1-8 sex $ 11 age height weight;
label name ='First name'
sex ='Gender'
age ='Age in years'
height='Height in inches'
weight='Weight in pounds';
datalines;
Alice F 13 56.5 84.0
Becka F 13 65.3 98.0
Gail F 14 64.3 90.0
Karen F 12 56.3 77.0
Kathy F 12 59.8 84.5
Mary F 15 66.5 112.0
Sandy F 11 51.3 50.5
Sharon F 15 62.5 112.5
Tammy F 14 62.8 102.5
Alfred M 14 69.0 112.5
Duke M 14 63.5 102.5
Guido M 15 67.0 133.0
James M 12 57.3 83.0
Jeffrey M 13 62.5 84.0
John M 12 59.0 99.5
Philip M 16 72.0 150.0
Robert M 12 64.8 128.0
Thomas M 11 57.5 85.0
William M 15 66.5 112.0
run;
/* Copyright(c) 1996 by SAS Institute Inc., Cary, NC USA */
/* Approach 1. */
DFINIT:
namelist=makelist();
dsid=open('sasuser.class');
nlevels=0;
rc=lvarlevel(dsid,'name',nlevels,namelist);
rc=close(dsid);
return;
NAMESEL:
index=popmenu(namelist);
if index>0 then
do;
name=getitemc(namelist,index);
call send(_self_,'_erroroff_column_','name');
end;
return;
NAME:
if searchc(namelist,name)=0 then
do;
call send(_self_,'_erroron_column_','name');
_msg_='NAME is invalid. Please reenter.';
call send(_viewer_,'_goto_column_','name');
end;
else
call send(_self_,'_erroroff_column_','name');
return;
AGE:
if age<10 then
do;
call send(_self_,'_erroron_column_','age');
_msg_='AGE is invalid. Please reenter.';
call send(_viewer_,'_goto_column_','age');
end;
else
call send(_self_,'_erroroff_column_','age');
return;
HEIGHT:
if height<50 then
do;
call send(_self_,'_erroron_column_','height');
_msg_='HEIGHT is invalid. Please reenter.';
call send(_viewer_,'_goto_column_','height');
end;
else
call send(_self_,'_erroroff_column_','height');
return;
WEIGHT:
if weight<50 then
do;
call send(_self_,'_erroron_column_','weight');
_msg_='WEIGHT is invalid. Please reenter.';
call send(_viewer_,'_goto_column_','weight');
end;
else
call send(_self_,'_erroroff_column_','weight');
return;
DFTERM:
rc=dellist(namelist);
return;
/* Copyright(c) 1996 by SAS Institute Inc., Cary, NC USA */
/* Approach 2. */
DFINIT:
namelist=makelist();
dsid=open('sasuser.class');
nlevels=0;
rc=lvarlevel(dsid,'name',nlevels,namelist);
rc=close(dsid);
control error;
return;
NAMESEL:
index=popmenu(namelist);
if index>0 then
do;
name=getitemc(namelist,index);
call send(_self_,'_erroroff_column_','name');
end;
return;
MAIN:
if searchc(namelist,name)=0 then
do;
call send(_self_,'_erroron_column_','name');
_msg_='NAME is invalid. Please reenter.';
call send(_viewer_,'_goto_column_','name');
end;
else call send(_self_,'_erroroff_column_','name');
if age<10 then
do;
call send(_self_,'_erroron_column_','age');
_msg_='AGE is invalid. Please reenter.';
call send(_viewer_,'_goto_column_','age');
end;
else
call send(_self_,'_erroroff_column_','age');
if height<50 then
do;
call send(_self_,'_erroron_column_','height');
_msg_='HEIGHT is invalid. Please reenter.';
call send(_viewer_,'_goto_column_','height');
end;
else
call send(_self_,'_erroroff_column_','height');
if weight<50 then
do;
call send(_self_,'_erroron_column_','weight');
_msg_='WEIGHT is invalid. Please reenter.';
call send(_viewer_,'_goto_column_','weight');
end;
else
call send(_self_,'_erroroff_column_','weight');
return;
DFTERM:
rc=dellist(namelist);
return;
/* Copyright(c) 1995 by SAS Institute Inc., Cary, NC USA */
/* Approach 3. */
length mod inerror $ 1;
DFINIT:
namelist=makelist();
dsid=open('sasuser.class');
nlevels=0;
rc=lvarlevel(dsid,'name',nlevels,namelist);
rc=close(dsid);
control error;
return;
NAMESEL:
index=popmenu(namelist);
if index>0 then
do;
name=getitemc(namelist,index);
call send(_self_,'_erroroff_column_','name');
end;
return;
MAIN:
/* Check for NAME column */
call send(_self_,'_get_column_attribute_','name','modified',mod);
call send(_self_,'_get_column_attribute_','name','error',inerror);
if mod='Y' or inerror='Y' then
do;
if searchc(namelist,name)=0 then
do;
call send(_self_,'_erroron_column_','name');
_msg_='Invalid value for NAME. Please reenter.';
call send(_viewer_,'_goto_column_','name');
end;
else call send(_self_,'_erroroff_column_','name');
end;
/* Check for AGE column */
call send(_self_,'_get_column_attribute_','age','modified',mod);
call send(_self_,'_get_column_attribute_','age','error',inerror);
if mod='Y' or inerror='Y' then
do;
if age<10 then
do;
call send(_self_,'_erroron_column_','age');
_msg_='AGE must be greater than 10. Please reenter.';
call send(_viewer_,'_goto_column_','age');
end;
else call send(_self_,'_erroroff_column_','age');
end;
return;
DFTERM:
rc=dellist(namelist);
return;
/* Copyright(c) 1996 by SAS Institute Inc., Cary, NC USA */
/* Approach 4. */
length colname $ 8 _column_name_ $ 8;
DFINIT:
namelist=makelist();
dsid=open('sasuser.class');
nlevels=0;
rc=lvarlevel(dsid,'name',nlevels,namelist);
rc=close(dsid);
control error;
errorlst=makelist();
return;
NAMESEL:
index=popmenu(namelist);
if index>0 then
do;
name=getitemc(namelist,index);
call send(_self_,'_erroroff_column_','name');
position=searchc(errorlst,'NAME');
if position>0 then
errorlst=delitem(errorlst,position);
end;
return;
MAIN:
if listlen(errorlst) then
do;
colname=getitemc(errorlst,listlen(errorlst));
select(colname);
when('NAME')
_msg_='Invalid value for NAME. Please reenter.';
when('AGE')
_msg_='AGE must be greater than 10. Please reenter.';
when('HEIGHT')
_msg_='HEIGHT must be greater than 50. Please reenter.';
when('WEIGHT')
_msg_='WEIGHT must be greater than 50. Please reenter.';
otherwise;
end;
call send(_viewer_,'_goto_column_',colname);
end;
return;
NAME:
AGE:
HEIGHT:
WEIGHT:
errorflag=0;
if _column_name_='NAME' then
do;
if searchc(namelist,name)=0 then errorflag=1;
end;
if _column_name_='AGE' then
do;
if AGE<10 then errorflag=1;
end;
if _column_name_='HEIGHT' then
do;
if HEIGHT<50 then errorflag=1;
end;
if _column_name_='WEIGHT' then
do;
if WEIGHT<50 then errorflag=1;
end;
link updtlist;
return;
UPDTLIST:
position=searchc(errorlst,_column_name_);
if errorflag=1 then
do;
if position le 0 then
do;
call send(_self_,'_erroron_column_',_column_name_);
errorlst=insertc(errorlst,_column_name_);
end;
end;
else
if position>0 then
do;
call send(_self_,'_erroroff_column_',_column_name_);
errorlst=delitem(errorlst,position);
end;
return;
DFTERM:
rc=dellist(namelist);
rc=dellist(errorlst);
return;