楼主: ihust
2943 18

[问答] 用宏分割数据集 [推广有奖]

11
Eternal0601 发表于 2013-8-13 21:08:59 |只看作者 |坛友微信交流群
bobguy 发表于 2013-8-13 10:46
The solution is very inefficient if many data sets needs to be generated.

I give a hint here,
...
Thanks. I didn't consider it. Maybe the following is ok.

proc sql noprint;
    create table vlist as
        select distinct var1 from raw
        order by var1;
quit;

data _null_;
        set vlist end=last;
        call symputx("v"||cats(_n_),var1);
        if last then call symput("N",cats(_n_));
run;

%macro split;
data %do i= 1 %to &N.;
         data_&&v&i
         %end;;
        set raw;
        select (var1);
                %do i= 1 %to &N.;
                when ("&&v&i") output data_&&v&i;
                %end;
        end;
run;
%mend;

%split

使用道具

12
bobguy 发表于 2013-8-14 05:23:44 |只看作者 |坛友微信交流群
Eternal0601 发表于 2013-8-13 21:08
Thanks. I didn't consider it. Maybe the following is ok.

proc sql noprint;
That is the right way. Yoc can improve it by combining 1)+2) as

data raw;
  var1='a'; output; var1='a'; output;
  var1='b'; output; var1='c'; output;
run;

proc sql noprint;
   
        select distinct var1
        into: var1 - :var30000
        from raw
        order by var1;
quit;

%put >>>&sqlobs<<<;
%put >>>&var1 &var2 &&var&sqlobs<<<;
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
Tigflanker + 1 + 1 + 1 Good way to write values into MV by dist

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

使用道具

13
henryyhl 发表于 2013-8-14 13:14:06 |只看作者 |坛友微信交流群
学习了一下程序,很有收获~
It's not going to be easy, but it is going to be worth it.

使用道具

14
Tigflanker 发表于 2013-8-28 13:57:20 |只看作者 |坛友微信交流群
bobguy 发表于 2013-8-14 05:23
That is the right way. Yoc can improve it by combining 1)+2) as

data raw;
Hi bob,

I have a question need to require you.

As the code show that:

proc sql noprint;
        select distinct var1
        into: var1 - :var30000
        from raw
        order by var1;
quit;

But mostly, I need to know which variable means what value. For example:

%do n=1 %to &N;
  %put &&var&n..;
%end;

So, how to write _N_ meanwhile in the SQL step as above in case I have to order the dataset raw with another sequence.
Bye SAS.
若有缘,能重聚。

使用道具

15
bobguy 发表于 2013-9-5 08:45:44 |只看作者 |坛友微信交流群
Tigflanker 发表于 2013-8-28 13:57
Hi bob,

I have a question need to require you.
In this case,

  _N_=&sqlobs

to order the dataset raw with another sequence= order by YOUR VARIABLE

使用道具

16
jingju11 发表于 2013-9-6 06:55:01 |只看作者 |坛友微信交流群
Eternal0601 发表于 2013-8-13 21:08
Thanks. I didn't consider it. Maybe the following is ok.

proc sql noprint;
真是佩服作者的sas技巧:一个人给出两种截然不同但是都很高超的sas程序。最后的取舍应该根据程序的效率。我运行了两个程序,基于一个数据集1,000,000记录,变量取值大概1000个,取值均匀的随机分布。结果是:where-call execute =140s, select/when-macro=200s.且不说如果数据sorted/indexed,where- 更有效率。也就是,你的第一个程序不但写得好,而且效率也好。
佩服。
京剧

使用道具

17
Eternal0601 发表于 2013-9-6 22:05:35 |只看作者 |坛友微信交流群
jingju11 发表于 2013-9-6 06:55
真是佩服作者的sas技巧:一个人给出两种截然不同但是都很高超的sas程序。最后的取舍应该根据程序的效率。 ...
Thanks for leting me know that. And your blog is great.

使用道具

18
jzplarry 发表于 2013-9-10 16:45:14 |只看作者 |坛友微信交流群
hsaotsud程序比较漂亮。

使用道具

19
Tato酱 发表于 2013-9-10 17:13:02 |只看作者 |坛友微信交流群
中间一段proc sql有必要吗?

使用道具

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

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

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

GMT+8, 2024-5-14 03:37