楼主: jintianxiu
7445 12

[原创博文] 关于生成行业虚拟变量的一点疑问。 [推广有奖]

  • 2关注
  • 0粉丝

本科生

8%

还不是VIP/贵宾

-

威望
0
论坛币
4 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
590 点
帖子
81
精华
0
在线时间
38 小时
注册时间
2010-3-6
最后登录
2012-9-21

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
下面的程序,是我用来生成行业虚拟变量的。但是为啥,为啥生成的变量中取值是1和.(missing ),而不是0.请各位大侠帮忙查下哪里有问题。拜托啦~~
data a;input n r sic value date ddmmyy8.;
format date ddmmyy10.;
cards;
1  0.1  1   109 01-12-10
2  0.2  1   209 01-12-10
3  0.3  1   167 01-12-10
4  0.1  2   123 01-12-10
5  0.2  2   200 01-12-10
6  0.3  2   210 01-12-10
7  0.4  2   342 02-12-10
8  0.12 1   223 02-12-10
1  0.29 1   560 02-12-10
;
run;
proc sql noprint;
select distinct sic into: values separated by ' '
from a
where not missing(sic);
%let n=&sqlobs.;
quit;

%macro create_dumy;
data b;
set a;
select(sic);
%do i=1 %to &n.;
%let val = %scan(&values.,&i);
when( "&val.") dumy_&i =1;
%end;
otherwise put '0';
end;
run;

%mend;

%create_dumy
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:虚拟变量 otherwise separate Distinct proc sql

回帖推荐

maidenhan 发表于7楼  查看完整内容

%macro create_dumy; data b; set a; %do i=1 %to &n.; dumy_&i =0; %end; select(sic); %do i=1 %to &n.; %let val = %scan(&values.,&i); when( "&val.") dumy_&i =1; %end; otherwise put '0'; end; run; %mend; %create_dumy

本帖被以下文库推荐

沙发
jintianxiu 发表于 2011-12-21 09:40:50 |只看作者 |坛友微信交流群
顶起啦~~

使用道具

藤椅
jingju11 发表于 2011-12-21 09:49:42 |只看作者 |坛友微信交流群
otherwise put '0';

此句的动作尽在log里,没有给变量dummy_&i赋值
京剧

使用道具

板凳
jintianxiu 发表于 2011-12-21 10:41:10 |只看作者 |坛友微信交流群
jingju11 发表于 2011-12-21 09:49
此句的动作尽在log里,没有给变量dummy_&i赋值
京剧
哦,但是请指点怎么样修正啦,谢谢。

使用道具

报纸
jingju11 发表于 2011-12-21 11:09:30 |只看作者 |坛友微信交流群
jintianxiu 发表于 2011-12-21 10:41
哦,但是请指点怎么样修正啦,谢谢。
我不熟悉SQLOBS的用法,所以请你检查一下该值是否是你所希望的。
sic看起来是数字,为什么用“&VAL."?
改为otherwise dumy_&I =0; ---PUT '0' 无用处。
另外,英文有个单词叫dummy。。
京剧

使用道具

地板
jintianxiu 发表于 2011-12-21 16:34:06 |只看作者 |坛友微信交流群
顶起啊

使用道具

7
maidenhan 发表于 2011-12-21 17:51:44 |只看作者 |坛友微信交流群
%macro create_dumy;
data b;
        set a;
        %do i=1 %to &n.;
                dumy_&i =0;
        %end;
        select(sic);
                %do i=1 %to &n.;
                        %let val = %scan(&values.,&i);
                        when( "&val.") dumy_&i =1;
                %end;
                otherwise put '0';
        end;
run;
%mend;

%create_dumy
已有 2 人评分经验 论坛币 学术水平 热心指数 收起 理由
bakoll + 3 + 3 精彩帖子
jingju11 + 1 + 1 写得真好。

总评分: 经验 + 3  论坛币 + 3  学术水平 + 1  热心指数 + 1   查看全部评分

使用道具

8
jintianxiu 发表于 2011-12-21 21:48:34 |只看作者 |坛友微信交流群
maidenhan 发表于 2011-12-21 17:51
%macro create_dumy;
data b;
        set a;
老兄,程序更加不能运行出结果啊,是不是哪里有问题啊?

使用道具

9
情迷仲夏夜 发表于 2011-12-22 05:49:47 |只看作者 |坛友微信交流群
7楼的程序可以工作呀!
%macro create_dumy;
data b;
   set a;
   %do i=1 %to &n.;dumy_&i=0;%end;
   select(sic);
      %do i=1 %to &n.;
         %let val = %scan(&values.,&i);
         when(
"&val.") dumy_&i =1;
      %end;
   otherwise put
'0';end;
proc print data=b;run;
%mend;
%create_dumy

Obs    n      r     sic    value          date    dumy_1    dumy_2

1     1    0.10     1      109     01/12/2010       1         0
2     2    0.20     1      209     01/12/2010       1         0
3     3    0.30     1      167     01/12/2010       1         0
4     4    0.10     2      123     01/12/2010       0         1
5     5    0.20     2      200     01/12/2010       0         1
6     6    0.30     2      210     01/12/2010       0         1
7     7    0.40     2      342     02/12/2010       0         1
8     8    0.12     1      223     02/12/2010       1         0
9     1    0.29     1      560     02/12/2010       1         0

使用道具

10
jintianxiu 发表于 2011-12-28 10:01:21 |只看作者 |坛友微信交流群
情迷仲夏夜 发表于 2011-12-22 05:49
7楼的程序可以工作呀!
%macro create_dumy;
data b;
为啥 我的不能工作呢?童鞋,帮忙看下把。这是我的log值。

32   %macro create_dumy;
33   data b;
34      set a;
35      %do i=1 %to &n.;dumy_&i=0;%end;
36      select(sic);
37         %do i=1 %to &n.;
38            %let val = %scan(&values.,&i);
39            when( "&val.") dumy_&i =1;
40         %end;
41      otherwise put '0';end;
42   proc print data=b;run;
43   %mend;

44   %create_dumy
WARNING: Apparent symbolic reference N not resolved.
ERROR: A character operand was found in the %EVAL function or %IF condition where a
       numeric operand is required. The condition was: &n.
ERROR: The %TO value of the %DO I loop is invalid.
ERROR: The macro CREATE_DUMY will stop executing.

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-5-1 13:48