data b;
do i=1 to 100;
%creat_var(a)
output;
end;
run;[/code:24wyxak4]作者: shiyiming 时间: 2009-7-27 13:53 标题: Re: 再求教:如何写dummy变量最快? 不是创建模拟数据。
比如说吧,我有10个行业(变量名是IND),编码从A-J。
firmcode ind
1 A
2 A
3 C
4 D
...
现在我想生成dummy (哑变量),我就要写IND1 = IND= "A", IND2 = IND= "B"...,就变成这样:
firmcode ind IND1 IND2 IND3 IND4 ....
1 A 1 0 0 0
2 A 1 0 0 0
3 C 0 0 1 0
4 D 0 0 0 1
...
如果你有100个行业,就不可能逐个逐个写IND1 = IND = "A";这样。
我的想法是把所有的不同的ind读入一个宏变量,然后让程序自动写IND&i = IND = "XX"
有没有办法实现呢?作者: Qiong 时间: 2009-7-27 13:58 标题: Re: 再求教:如何写dummy变量最快? [code:1ro5s5rd]
data v;
input type $ @@;
cards;
a b c a b b c d
;
run;
%macro dummy_create(set=, var=);
proc sort data= &set(keep=&var.) out=temp1 nodupkey;
by &var.;
run;
data _null_;
set temp1;
call symput ('no', _n_ );
run;
proc sort data= &set ;
by &var.;
run;
data &set(drop=n i);
retain n 0;
set &set;
array &var._dummy(&no.) (&no.*0);
by &var.;
if first.&var. then n=n+1;
do i=1 to dim(&var._dummy);
if i=n then &var._dummy(i)=1;
else &var._dummy(i)=0;
end;
run;
proc datasets;
delete temp1;
quit;
%mend dummy_create;
%dummy_create(set=v,var=type);[/code:1ro5s5rd]作者: shiyiming 时间: 2009-7-27 16:43 标题: Re: 再求教:如何写dummy变量最快? [code:2dezfuht]data a;
input firmcode ind $ ind_no;
datalines;
1 A 1
2 A 1
3 C 3
4 D 4
;
/* global macro variable: no */
data b;
set a end=last;
if no<ind_no then no=ind_no;
if last then call symput ('no',trim(left(put(no,best.))));
run;
/* creat dataset */
data b;
%creat_var(a)
run;[/code:2dezfuht]作者: shiyiming 时间: 2009-7-28 07:23 标题: Re: 再求教:如何写dummy变量最快? data v;
input type $ @@;
cards;
a b c a b b c d
;
run;
proc sql noprint;
select count(distinct type ) into :n from v
;
%let n=&n
;
select distinct quote(strip(type)) into :type_ separated by ' ' from v
;
quit
;
data vDummy;
set v;
array t{*} type1-type&n;
array t_{&n} $ _temporary_ (&type_);
do i=1 to &n;
t{i}=0;
if type=t_{i} then t{i}=1;
end;
drop i;
run
;作者: shiyiming 时间: 2009-7-28 08:19 标题: Re: 再求教:如何写dummy变量最快? Assign an unique value to each 行业, for
example 1 to A, 2 to B, and 10 to J.
order 行业
1 A
1 A
3 C
4 D
after done above, convert variable "order"
to binary value. Thait's it.作者: shiyiming 时间: 2009-7-28 10:45 标题: Re: 再求教:如何写dummy变量最快? 死猪头作者: shiyiming 时间: 2009-7-30 02:13 标题: Re: 再求教:如何写dummy变量最快? 假设根据一个字符型变量的值来产生:
proc sql;
select distinct VarName into: values separated by ' '
from DataSet_name
where not missing(VarName);
%let n=&sqlobs.;
quit;
%macro create_dumy;
data DataSet_Name;
set DataSet_Name;
select(varname);
%do i=1 %to &n.;
%let val = %scan(&values.,&i);
when("&val.") dumy_&i =1;
%end;
otherwise put "ERROR: Missing value found";
end;
run;