SAS编程|Array数组在adam中的常见应用

6 篇文章 7 订阅

1.一个简单的例子

data class;
	set sashelp.class;
	array vars[*] Age Height Weight;  /*vars为数组名,[*]表示通过计算数组元素个数确定数组下标*/    
	do i=1 to dim(vars);       /*dim为数组函数,表示求数组x第一维的元素的个数*/
        VARNAME=vlabel(vars[i]);
		AVALC=vars[i];
		output;
	end;
run;

        先拿class数据集举一个简单的例子,原数据集中每个人的人口学资料都放在同一行内,进行以上操作可以将年龄、身高、体重的信息变为竖排放置。值得注意的是,array数组内的变量需为同一类型的变量,所以该举例只对其中3个数值型变量进行了操作,性别未纳入操作。

运行结果如下:

2.adam中实现BDS结构(1)

data pe;
	set pe;
	array vars[*] PEGEN PESKIN PELY PEHEAD PENECK PEHT PEABD PESC PENS;
	array varu[*] PEGENMO PESKINMO PELYMO PEHEADMO PENECKMO PEHTMO PEABDMO PESCMO PENSMO;
	do i=1 to dim(vars);
		PARAMN=i;
		PARAMCD=vname(vars[i]);
		PARAM=vlabel(vars[i]);
		AVALC=tranwrd(tranwrd(vars[i],'异常无临床意义','NCS'),'异常有临床意义','CS');;
		AVAL=whichc(AVALC,'正常','NCS','CS');
		ADES=varu[i];
		output;
	end;
run;

        以上是写项目过程中实现BDS结构比较方便的用法,其中vname取变量名作为PARAMCD值,vlabel取变量的标签名作为PARAM值,AVALC直接取变量值,ADES同理。

        同时写两个数组时,这两个数组的变量个数需保持相等,有需要的话甚至可以同时写3个数组或者更多,但是实际应用中很少遇见。

3.adam中实现BDS结构(2)

data ex;
	set raw.ex(in=a) raw.suex(in=b);

	if a then EXATN=1;
	if b then EXATN=2;

	EXDSTXTS=cats(input(EXDSTXTL,best12.)+input(EXDSTXTR,best12.));
	array vars[*] EXDSTXTL EXDSTXTR EXDSTXTS;
	do i=1 to dim(vars);
		PARAMN=(i-1)*2+EXATN;
		PARAM=choosec(PARAMN,'首次注射(左侧)','补充注射(左侧)'
							,'首次注射(右侧)','补充注射(右侧)'
							,'首次注射(总注射量)','补充注射(总注射量)'	);
		PARAMCD=choosec(PARAMN,'EXRSL1','EXRSL2','EXRSR1','EXRSR2','EXRS1','EXRS2');
		AVALC=vars[i];
		output;
	end;
run;

        ex数据集为首次注射的数据,suex数据集为补充注射的数据,我觉得这样写比较巧妙的是“PARAMN=(i-1)*2+EXATN”这个地方。如果首次注射和补充注射只需分析其中的一个相同变量,甚至不用数组就可以解决,可以直接在“if a then ~”的地方完成对PARAMN的赋值。但是如果像现在这样涉及多个变量,这样写是我认为比较方便的解决方法。

        不过这样写之后,有个特殊的地方,PARAMN的值因为开头赋值的原因,首次注射的PARAMN值都为奇数,补充注射的PARAMN值都为偶数,所以需要注意对应PARAMCD的赋值。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值