Date: Wed, 10 Dec 1997 09:00:49 -0500
Reply-To: Girish S Patel <girish.s.patel@CCMAIL.CENSUS.GOV>
Sender: "SAS(r) Discussion" <SAS-L@UGA.CC.UGA.EDU>
From: Girish S Patel <girish.s.patel@CCMAIL.CENSUS.GOV>
Subject: STRING QUESTION
Content-Type: text/plain; charset=US-ASCII
Dear SAS-L'ers :
How should I get desired string (survdef) out of this code ?
options nocenter ls=80 ps=56 pageno=1;
data strt(keep= typfld stcol encol varname)
CONS(keep= typfld stcol encol CONST);
infile cards TRUNCOVER;
input
@16 keyword $11. /* keyword (header/tailer information) */
@27 fildnubr $3. /* Field Number */
@31 stcol $3. /* START COLUMN */
@35 encol $3. /* END COLUMN */
@40 typfld $1. @ ; /* field type (v=variable, c=constant) */
if upcase(typfld) in ('C') and
upcase(keyword)='FIELD' then do;
input
@43 CONST $CHAR33. /* variable name */
;
OUTPUT CONS;
END;
if upcase(typfld) in ('V') and
upcase(keyword)='FIELD' then do;
input
@43 varname $6. /* variable name */
@53 filename $2. /* file name (ct,c1,c2) */
;
OUTPUT STRT;
END;
else do; delete; end;
cards;
my_file 0001 field 001 001 005 C TITLE
my_file 0001 field 002 007 012 v year c1
my_file 0001 field 003 013 013 v colnum c1
my_file 0001 field 004 014 023 C THIS IS MY
my_file 0001 field 006 025 030 v idnubr c1
my_file 0001 field 013 032 036 C FIXIT
;
run;
proc print DATA=STRT;
title1 'Sample Data for my_File';
run;
data CONS;
set CONS end=last NOBS=NUM ;
if last then call symput('TEMP',CONST);
run;
proc print DATA=CONS;
title1 'data = CONS ';
run;
DATA ALL;
SET STRT CONS;
VAR=LEFT(VARNAME||CONST);
RUN;
PROC SORT DATA=ALL; BY STCOL ; RUN;
PROC PRINT DATA=ALL;
TITLE1 'DATA=ALL' ;
RUN;
/* -------------- ******** ********** *******---------------- */
/* -------------- DEFINE SURVEY SPECIFIC LINE --------------- */
/* -------------- ******** ********** *******---------------- */
options formdlim = ' ';
* options mprint symbolgen formdlim = ' ';
%macro create(string);
&string =
%do i = 1 %to &numvar;
LEFT(COMPRESS(
&&var&i
))
%if &i ne &numvar %then
%str( ||' '||);
%else
%str(;);
%END;
%mend;
data a;
input year $ COLNUM $ idnubr $ ;
cards;
199501 A 10001
199502 B 20001
199503 C 30001
199504 D 40001
;
run;
PROC PRINT DATA=A;
TITLE1 'DATA = A';
RUN;
data _null_;
set strt NOBS=NUM ;
label = 'var'||left(_n_);
call symput(label,varname);
call symput('numvar',num);
run;
PROC SQL NOPRINT;
SELECT DISTINCT VARNAME INTO : VAR FROM all WHERE TYPFLD='V';
PROC SQL NOPRINT;
SELECT DISTINCT CONST INTO : VAR FROM all where typfld='C';
data d;
set a;
%create(SURVDEF);
run;
proc print;
run;
Sample Data for my_File 08:24 Wednesday, December 10, 1997 1
OBS STCOL ENCOL TYPFLD VARNAME
1 007 012 v year
2 013 013 v colnum
3 025 030 v idnubr
data = CONS 08:24 Wednesday, December 10, 1997 2
OBS STCOL ENCOL TYPFLD CONST
1 001 005 C TITLE
2 014 023 C THIS IS MY
3 032 036 C FIXIT
DATA=ALL 08:24 Wednesday, December 10, 1997 3
OBS STCOL ENCOL TYPFLD VARNAME CONST VAR
1 001 005 C TITLE TITLE
2 007 012 v year year
3 013 013 v colnum colnum
4 014 023 C THIS IS MY THIS IS MY
5 025 030 v idnubr idnubr
6 032 036 C FIXIT FIXIT
DATA = A 08:24 Wednesday, December 10, 1997 4
OBS YEAR COLNUM IDNUBR
1 199501 A 10001
2 199502 B 20001
3 199503 C 30001
4 199504 D 40001
DATA = A 08:24 Wednesday, December 10, 1997 5
OBS YEAR COLNUM IDNUBR SURVDEF
1 199501 A 10001 199501 A 10001
2 199502 B 20001 199502 B 20001
3 199503 C 30001 199503 C 30001
4 199504 D 40001 199504 D 40001
IN THE OUTPUT >>>>>>>>>>> SURVDEF COL SHOULD BE ......
SURVDEF
TITLE 199501 A THIS IS MY 10001 FIXIT
TITLE 199502 B THIS IS MY 20001 FIXIT
TITLE 199503 C THIS IS MY 30001 FIXIT
TITLE 199504 D THIS IS MY 40001 FIXIT