全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1467 2
2014-11-28
悬赏 50 个论坛币 已解决
请教:用SAS 编个小程序,看看这个棋怎么玩

我们有个数据文件叫做chess_history,它有几千行的记录,只有两列,第一列是棋手名字(player),第二列是这个棋手一步一步的移动棋子的一个历史(move)。这个数据文件的前4行如下:

data chess_history;
input player $ 1-4     move $ 5-15;
datalines;
wang aa|cc|aa|bb
song bb|cc|dd|ff
fang mm|nn|bb|||
teng aa|mm||||||
;
proc print;run;

第一行数据告诉我们wang先移动棋子aa,后又移动棋子cc,后又移动棋子aa,最后移动棋子bb。最后一行数据告诉我们teng先移动aa,最后移动mm。

现请帮忙编个小程序,通过这个数据文件chess_history完成如下两个任务:
(1)列出这种棋有多少不同的棋子,(aa,bb,cc,mm,...)
(2)列出这个棋的游戏规则,先走哪个后走哪个,比如,aa先走,bb后走,再走cc,等等。(不求完全知道规则,尽量列出即可,目的为了多加了解这个棋的规则)。


抛砖引玉,我对第一个问题的一点思路(比如可以基于sas的substr函数来把move这列按照棋子拆成多列,然后基于proc transpose转置,合并,然后基于proc sort去除该列中的重复棋子名称。)

抛砖引玉,我对第二个问题的一点思路(比如可以基于sas的index函数来确定move这列中的棋子的一些基本位置)。

即使只能完成上面其中一个任务,哪怕只给提供sas程序的思路和一些程序片段,我也感激不尽,感谢解答。


最佳答案

jl60156 查看完整内容

part one: %macro chess; data %do i=1 %to 4; chess&i %end;; set chess_history; %do i=1 %to 4; moveall=scan(move,&i,"|","m"); step=&i; output chess&i; %end; run; data chessall; set %do i=1 %to 4; chess&i %end;; run; proc sql; create table want1 as select distinct moveall as unique_chess from chessall having not missing(moveall); quit; %mend; %chess; part two ...
二维码

扫码加我 拉你入群

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

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

全部回复
2014-11-28 15:26:02
part one:


%macro chess;
data %do i=1 %to 4; chess&i %end;;
        set chess_history;
        %do i=1 %to 4;
         moveall=scan(move,&i,"|","m"); step=&i; output chess&i;
         %end;
run;
data chessall;
        set %do i=1 %to 4; chess&i %end;;
run;

proc sql;
         create table want1 as
         select distinct moveall as unique_chess
         from chessall
        having not missing(moveall);
quit;
%mend;
%chess;

part two:

from above dataset chessall, you can find possible combinations from step 1 to step 4.


hope it helpful and get your reward.
二维码

扫码加我 拉你入群

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

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

2014-11-28 22:24:02
第二个不好做。两个棋子的组合还好,10步以上组合就太多了
二维码

扫码加我 拉你入群

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

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

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群