楼主: lyricette
2946 11

[原创博文] 一个有挑战性的编程难题(急)!! [推广有奖]

  • 0关注
  • 1粉丝

Quant

博士生

86%

还不是VIP/贵宾

-

威望
0
论坛币
3602 个
通用积分
4.5000
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
9882 点
帖子
59
精华
0
在线时间
675 小时
注册时间
2009-3-6
最后登录
2023-12-11

楼主
lyricette 发表于 2010-9-27 17:47:58 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
我得编写这么一段程序:
     有两个信号A和B,取值为0-1,取0和1是随机的。
    在表单里我们可以看到是      A      B
                                                    1      0
                                                    0      0
                                                    1      0
                                                    0      1
                                                    ..........
现在要达到这么一个过程:我要建立一个新的变量(数组也可以),初始值为0。在A第一次取1的时候,对应行就设为1,然后等待一直到B列出现1,则重设为0,如此反复。
请论坛各位大侠们指点,小弟先谢谢了!!
二维码

扫码加我 拉你入群

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

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

关键词:挑战性 各位大侠 初始值 程序

回帖推荐

crackman 发表于8楼  查看完整内容

data crackman; input a b; obs=_n_; datalines; 0 0 0 1 1 0 0 0 1 0 0 1 0 0 1 0 1 0 0 1 ; run; proc sort data=crackman; by a b; run; data _null_; set crackman; by a; if first.a=1 and a=1 then call symput("a",obs); run; data b; set crackman(where=(obs>=&a.)); if b=1; run; %macro crackman; data _null_; set b; call symput("b"||left(_n_),obs); run; proc sql nop ...

本帖被以下文库推荐

沙发
soporaeternus 发表于 2010-9-27 17:57:45
我的理解是A开,B关
A B都为1认为是开关各一次,即为0的话
这个试试,没仔细测......
  1. data a;
  2.         do i=1 to 100 by 1;
  3.                 a=(ranuni(123)>0.5);
  4.                 b=(ranuni(123)>0.5);
  5.                 output;
  6.         end;
  7.         drop i;
  8. run;


  9. data b;
  10.         set a;
  11.         retain c 0;
  12.         if _N_=1 then c=0;
  13.         if a=1 then c=1;
  14.         if b=1 then c=0;
  15. run;
复制代码

还有种可能是A B都可能是开
回家再写,呵呵
Let them be hard, but never unjust

藤椅
sopching 发表于 2010-9-27 19:05:21
试试看:
data old;
         do i=1 to 100 by 1;
a=(ranuni(123)>0.5);
b=(ranuni(123)>0.5);
                 output;
         end;
         drop i;
run;
data new;
set a;       
retain c 0;       
if c=1 and b=1 then c=0;
else if a=1 then c=1;
run;

板凳
crackman 发表于 2010-9-27 20:00:59
我觉得楼上的两位没有理解楼主的意思

报纸
crackman 发表于 2010-9-27 20:01:21
data crackman;
input a b;
obs=_n_;
datalines;
0 0       
0 1       
1 0       
0 0       
1 0       
0 1       
0 0       
1 0       
1 0       
0 1       
;
run;

地板
lyricette 发表于 2010-9-27 20:02:03
感谢各位大侠的指导!
我想再问问进一步问题。
   同样是刚才A、B,如果将建立的新变量C设定为:
    C的初始值为0;
    在A第一次取值为1时,赋值为1,直到B取值为1时重设为0,期间不考虑A的取值变化。
    在B第一次取值为1时,赋值为-1,直到A取值为1重设为0,期间不考虑B值的取值变化。
如果各位能帮我解决这个问题,那实在是感激不尽!

7
crackman 发表于 2010-9-27 20:02:36
如果是这种如何写呢?
我觉得最好要确定A第一次出现1的_N_值
然后在大于A第一次出现_N_的值的B的_N_值,这样就好界定

8
crackman 发表于 2010-9-27 20:31:44
data crackman;
input a b;
obs=_n_;
datalines;
0 0       
0 1       
1 0       
0 0       
1 0       
0 1       
0 0       
1 0       
1 0       
0 1       
;
run;
proc sort data=crackman;
by a b;
run;
data _null_;
set crackman;
by a;
if first.a=1 and a=1 then call symput("a",obs);
run;
data b;
set crackman(where=(obs>=&a.));
if b=1;
run;
%macro crackman;
data _null_;
set b;
call symput("b"||left(_n_),obs);
run;
proc sql noprint;
select count(*) as obsnum into: obsnum from b;
quit;
data crackman;
set crackman;
%do i=1 %to &obsnum.;
if obs<&a. OR obs=&&b&i. then c=0;
%end;
if c=. then c=1;
run;
proc sort data=crackman;
by obs;
run;
%mend crackman;
%crackman;









写的很复杂很不流畅
但是可以看得出我的思路来
已有 1 人评分学术水平 热心指数 收起 理由
peijiamei + 3 + 2 精彩帖子

总评分: 学术水平 + 3  热心指数 + 2   查看全部评分

9
crackman 发表于 2010-9-27 20:35:00
6# lyricette
A和B交换一下
其实是一样的 不难的

10
lyricette 发表于 2010-9-27 21:47:49
好的,实在是谢谢版主了!
我先研究研究,待会不懂的还想请教一下版主。

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-25 15:09