Hi, I am trying to set a dataset only where the value of a particular column (let's call it col1) is equal to the value of a macro var (let's call it test1) . This works perfectly until, bizarrely, I multiply col1 by 100 to form col2 so that now I am setting only where col2= &test1.. With this change, it only works for certain rows, not others. I know this sounds really confusing, here's the full code: *create test dataset; proc sql;
create table test
(hello char(40), col1 num);
insert into test
values('a',0.059)
values('b',0.064)
values('c',0.044)
values('d',0.082)
values('e',0.061)
values('f',0.082)
values('g',0.066)
values('h',0.042)
values('i',0.055)
;
quit;
*multiply by 100, create a new column:;
data test0 (drop = col1);
set test;
col2 = col1*100;
run;
*create macro vars out of all values of col2 above;
%let test1 = 5.9;*;
%let test2 = 6.4;
%let test3 = 4.4;*;
%let test4 = 8.2;*;
%let test5 = 6.1;
%let test6 = 6.6;*;
%let test7 = 4.2;
%let test8 = 5.5;
*try to subset to each of these;
data test1;
set test0;
where col2 = &test1.;
run;
proc print;
run;
data test2;
set test0;
where col2 = &test2.;
run;
proc print;
run;
data test3;
set test0;
where col2 = &test3.;
run;
proc print;
run;
data test4;
set test0;
where col2 = &test4.;
run;
proc print;
run;
data test5;
set test0;
where col2 = &test5.;
run;
proc print;
run;
data test6;
set test0;
where col2 = &test6.;
run;
proc print;
run;
data test7;
set test0;
where col2 = &test7.;
run;
proc print;
run;
data test8;
set test0;
where col2 = &test8.;
run;
proc print;
run; When I run it (I also had a friend run it and she got the same issue), I only get 4 datasets w/ observations, those whose macro var does not have a commented star (to the right of the let statement). Here's the log statement I get for one of the ones that did not print: NOTE: There were 0 observations read from the data set WORK.TEST0. WHERE col2=5.9; NOTE: The data set WORK.TEST1 has 0 observations and 2 variables. I originally had tried something like: data test1; set test; where col1 = &test1./100; run; proc print; run; Here's the log statement I get for that: NOTE: There were 0 observations read from the data set WORK.TEST. WHERE col1=0.059; NOTE: The data set WORK.TEST1 has 0 observations and 2 variables. So then I tried switching to this col2 thing. I must be missing something obvious, but I'm at my wit's end - would really appreciate if someone could point it out. Thanks very much,
... View more