楼主: rain958
1933 4

[有偿编程] 求教个循环赋值的程序。谢谢关注。 [推广有奖]

  • 2关注
  • 2粉丝

副教授

40%

还不是VIP/贵宾

-

威望
0
论坛币
2123 个
通用积分
66.6586
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
44982 点
帖子
187
精华
0
在线时间
1516 小时
注册时间
2007-5-18
最后登录
2024-4-28

50论坛币
求教个SAS程序。
有A1- A9 九个变量,初始值均为1,
之后对九个变量循环赋值,对其中共计1-9 个变量赋值为0,使得其中还有1个零, 2个零,3个零、、、、、
例如,
第一次, 任选1个变量赋值为0 ,共有9行 ,即C(9,1)行;
第二次,任选2个变量赋值为0, 共有36行,即 C(9,2)行;
第三次,任选3个。。。一次类推,全选9个。。。

欢迎热心同学帮忙。。 谢谢。
关键词:sas程序 初始值 第三次 程序

回帖推荐

farmman60 发表于2楼  查看完整内容

沙发
farmman60 发表于 2014-6-8 21:43:59 |只看作者 |坛友微信交流群
  1. data have;
  2.   input var1-var9;
  3. cards;
  4. 1 1 1 1 1 1 1 1 1
  5. ;
  6. run;

  7. %macro select(dsn, start, end,outdsn,seed);
  8.       data &outdsn;
  9.           set &dsn (obs=0);
  10.           run;
  11.       proc transpose data=&dsn out=temp;
  12.           run;
  13.           %do i=&start %to &end;
  14.           %let ncomb=%sysfunc(comb(&end,&i));
  15.             %do j=1 %to &ncomb;
  16.                    %let seed=%eval(%sysfunc(round(%sysfunc(ranuni(&seed))*100000000)+&j);
  17.             proc surveyselect data=temp out=select&i&j(keep=_name_ col1) method=srs rep=1
  18.              sampsize=&i seed=&seed;
  19.       id _all_;
  20.       run;
  21.       data select&i&j;
  22.       set select&i&j;
  23.       col1=0;
  24.       run;
  25.       data temp&i&j;
  26.           set temp;
  27.           run;
  28.       data temp&i&j;
  29.        update temp&i&j select&i&j;
  30.            by _name_;
  31.            run;
  32.        proc transpose data=temp&i&j out=final&i&j(drop=_name_);
  33.            run;
  34.            data &outdsn;
  35.            set &outdsn final&i&j;
  36.            run;
  37.     %end;
  38.         %end;
  39. %mend;

  40. %select(have,1,9, want,388487)
复制代码

使用道具

藤椅
rain958 发表于 2014-6-9 08:58:14 |只看作者 |坛友微信交流群
farmman60 发表于 2014-6-8 21:43
抱歉,还请帮下忙,
因为我描述上有些问题,所以结果有些出入,
最后 的结果,可能不是任意变量赋值0,
而是每种组合设置一次0;
例如 包含1个0时,
生成的9行应为
0 1 1 1 1 1 1 1 1
1 0 1 1 1 1 1 1 1
1 1 0 1 1 1 1 1 1
1 1 1 0 1 1 1 1 1
1 1 1 1 0 1 1 1 1
1 1 1 1 1 0 1 1 1
1 1 1 1 1 1 0 1 1
1 1 1 1 1 1 1 0 1
1 1 1 1 1 1 1 1 0

2个0时,应为
0 0 1 1 1 1 1 1 1
0 1 0 1 1 1 1 1 1。。。如有时间再帮忙修改下,谢谢。


使用道具

板凳
farmman60 发表于 2014-6-9 11:11:27 |只看作者 |坛友微信交流群
rain958 发表于 2014-6-9 08:58
抱歉,还请帮下忙,
因为我描述上有些问题,所以结果有些出入,
最后 的结果,可能不是任意变量赋值0, ...
  1. data have;
  2.   input var1-var9;
  3. cards;
  4. 1 1 1 1 1 1 1 1 1
  5. ;
  6. run;

  7. data want;
  8.    set have;
  9.    array num(9)  (1 2 3 4 5 6 7 8 9);
  10.    array var var1-var9;
  11.    n=dim(var);
  12.    do i=1 to dim(var);
  13.       ncomb=comb(n,i);
  14.           do j=1 to ncomb;
  15.             call allcomb(j,i,of num(*));
  16.                  do k=1 to i;
  17.                   put num(k);
  18.                   var(num(k))=0;
  19.                  end;
  20.          output;
  21.                  do p=1 to dim(var);
  22.                   var(p)=1;
  23.                   end;
  24.           end;
  25.   end;
  26.   drop i j k p n: ;
  27. run;
复制代码
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
Tigflanker + 1 + 1 + 1 观点有启发

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

使用道具

报纸
rain958 发表于 2014-6-9 11:18:17 |只看作者 |坛友微信交流群
farmman60 发表于 2014-6-9 11:11
非常感谢~

使用道具

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

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

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

GMT+8, 2024-4-28 12:00