LISTSERV at the University of Georgia
Menubar Imagemap
Home Browse Manage Request Manuals Register
Previous messageNext messagePrevious in topicNext in topicPrevious by same authorNext by same authorPrevious page (December 1997, week 2)Back to main SAS-L pageJoin or leave SAS-L (or change settings)ReplyPost a new messageSearchProportional fontNon-proportional font
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


Back to: Top of message | Previous page | Main SAS-L page