楼主: caibirdcnb
5795 11

[问答] 请问高手怎么使用列数代替列名(变量名)啊?谢谢! [推广有奖]

  • 0关注
  • 37粉丝

讲师

47%

还不是VIP/贵宾

-

威望
0
论坛币
1367 个
通用积分
16.5538
学术水平
67 点
热心指数
70 点
信用等级
64 点
经验
6762 点
帖子
206
精华
2
在线时间
433 小时
注册时间
2011-8-31
最后登录
2023-9-23

楼主
caibirdcnb 发表于 2016-1-12 13:41:32 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
例如,想知道SAS某个数据集第N列的名称,想知道SAS第N列第M行的值,请问应该怎么写CODE,谢谢!

二维码

扫码加我 拉你入群

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

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

关键词:code 数据集 ODE COD

沙发
孤单的我们 发表于 2016-1-12 13:48:10
获取第i个变量名
data colomn;
   length name $ 8;
   dsid=open("work.yourdata","i");
   num=attrn(dsid,"nvars");
   do i=1 to num;
      name=varname(dsid,i);
      output;
   end;
   rc=close(dsid);
   keep i name;
run;

第M行的话,用point=限制就可以了

藤椅
caibirdcnb 发表于 2016-1-12 13:57:35
谢谢楼上,但这个程序只是映射列名和列号。
而我想要的是使用列号代替列名进行各种操作。

例如:
data test;
set sashelp.class;
X=name;
run;

上面程序我想让X=第一列,不管第一列的列名是name还是sex还是age等等。
你的程序可以让我从映射中去找到第1列的列名(假设叫ABC),然后再使用X=ABC。但太麻烦了,不够简洁优雅。

板凳
caibirdcnb 发表于 2016-1-12 14:02:53
补充一下,例如我想让X等于第1列,我希望得到的帮助是,有没有这样一个函数代表第N列,例如下面的column(1)代表第1列。
(column()函数是我自己说的,我想知道有没有这样的函数,如果有,格式语法是什么)

data test;
set sashelp.class;
X=column(1);
run;

报纸
孤单的我们 发表于 2016-1-12 14:08:37
caibirdcnb 发表于 2016-1-12 13:57
谢谢楼上,但这个程序只是映射列名和列号。
而我想要的是使用列号代替列名进行各种操作。
生成宏变量,就可以实现的。比如用&&var&i来控制第i个变量名,&var1=name &var2=sex。
是有点麻烦。

更简洁的方法,等大神来指教吧。

地板
孤单的我们 发表于 2016-1-12 14:14:47
caibirdcnb 发表于 2016-1-12 14:02
补充一下,例如我想让X等于第1列,我希望得到的帮助是,有没有这样一个函数代表第N列,例如下面的column(1) ...
array定义数组是可以的。但同一个数组里,要么全部是字符型,要么是数值型,不能混用。

array column$ name age sex;
column{1}=name;
column{2}=age;
column{3}=sex;

7
Tigflanker 发表于 2016-1-13 10:22:03
用dictionary去把数据集的名字取成宏变量,或者宏返回值,在data步中用
貌似再想不到更直接的方法

别完美,别被SAS玩儿坏了

8
caibirdcnb 发表于 2016-1-13 11:19:48
谢谢楼上各位,明白了,没有这样功能的函数。SAS作为高级语言这部分太让人失望了。按道理应该有类似Var[n]Obs[m]这样的函数可以读取某个单元格类似EXCEL的。
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
Tigflanker + 1 + 1 + 1 你失望或不失望,SAS都在那里啊

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

9
Tigflanker 发表于 2016-1-13 14:05:09
caibirdcnb 发表于 2016-1-13 11:19
谢谢楼上各位,明白了,没有这样功能的函数。SAS作为高级语言这部分太让人失望了。按道理应该有类似Var[n]O ...
取值函数是有的,fetchobs + getvarc可以达到你的要求,
你感兴趣可以自己查查,或者我忙后写给你

类似于:
%let rc=%sysfunc(fetchobs(&mydataid,2));
%let style=%sysfunc(getvarc(&mydataid,%sysfunc(varnum(&mydataid,Name))));

10
caibirdcnb 发表于 2016-1-13 16:17:02
Tigflanker 发表于 2016-1-13 14:05
取值函数是有的,fetchobs + getvarc可以达到你的要求,
你感兴趣可以自己查查,或者我忙后写给你
谢谢!高手就是见多识广。

有个疑问,getvarc(getvarn)得到的是列值,需要配合fetchobs使用,可以取值某个单元格,如果想要取值整个列呢?
例如下面程序想让X=第N列,应该用什么函数呢?另外上面函数还需要知道列是字符还是数字,似乎用起来特别麻烦。难道就没有方便、直接的办法吗?
data test;
set sashelp.class;
X=column(1);
run;

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

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