楼主: guanglei
11159 5

[问答] 为什么ERR:“已定义为字符型和数值型” [推广有奖]

  • 3关注
  • 9粉丝

已卖:1149份资源

副教授

14%

还不是VIP/贵宾

-

威望
0
论坛币
15815 个
通用积分
15.1713
学术水平
10 点
热心指数
12 点
信用等级
10 点
经验
296 点
帖子
606
精华
0
在线时间
802 小时
注册时间
2007-8-29
最后登录
2023-9-22

楼主
guanglei 发表于 2013-6-3 22:29:07 |AI写论文
50论坛币
  1. %do j = 1 %to 15;
  2.    proc model noprint data = one;  endogenous a;  exogenous r f VA e;
  3.           e = a*probnorm((log(a/f) + (r+va*va/2))/VA) -
  4.           f*exp(-r)*probnorm((log(a/f) + (r-va*va/2))/VA);  solve a/out=two;
  5.    data two;   set two;   num = _n_;   keep a num;
  6.    data one;   set one;   num = _n_;   drop a;  
  7.    data two;   merge one two;   by num;  l1p = lag1(permno);   l1a = lag1(a);
  8.    data two;   set two; if l1p = permno then ra = log(a/l1a);
  9.    proc means noprint data = two;   var ra;   by permno;   output out = bob;
  10.    data bar;   set bob; if _stat_ = 'MEAN';  mu = 252*ra;   keep permno mu;
  11.    data bob;   set bob; if _stat_ = 'STD'; va1 = sqrt(252)*RA;
  12.                if va1 < 0.01 then va1 = 0.01; keep permno va1;
  13.    data one;   merge two bob bar; by permno; vdif = va1 - va;
  14.                if abs(vdif) < 0.001 and vdif ne . then conv = 1;
  15.    data fin;   set one; if conv = 1;   assetvol = va1; proc sort; by permno descending date;  
  16.    data fin;   set fin; if permno ne lag1(permno);   curdat = 100*&yyy + &mmm;  iter = &j;
  17.    data conv;   merge conv fin;   by permno;  drop va ra l1p l1a conv cdt num;
  18.    data one;   set one; if conv ne 1;   va = va1;   drop va1;
  19. %end;
复制代码
变量permno是股票的代码。运行到“data fin;   set fin; if permno ne lag1(permno);   curdat = 100*&yyy + &mmm;  iter = &j;” 时会提示:ERROR: 变量 permno 已定义为字符型和数值型。这是什么原因呢?恳请高人解答啊!





最佳答案

yongyitian 查看完整内容

原因: 两个数据集参加运算时,相同变量有不同的类形。 /* run the following code and look at the results */ /* to see if there is any difference in the last column */ proc sql; select memname, name, type from dictionary.columns where libname='WORK' and name='permno'; quit;
关键词:err 数值型 字符型 Endogenous exogenous set
三人行,必有我师焉;择其善者而从之,其不善者而改之

沙发
yongyitian 发表于 2013-6-3 22:29:08
原因: 两个数据集参加运算时,相同变量有不同的类形。

/* run the following code and look at the results */
/* to see if there is any difference in the last column */

proc sql;
   select memname, name, type
   from dictionary.columns
   where libname='WORK' and name='permno';
quit;

藤椅
Imasasor 发表于 2013-6-3 22:35:30
检查你数据集two bob bar中的permno是不是即有数值型又有字符型
欢迎加入亚太地区第一R&Python数据挖掘群: 251548215;

板凳
pobel 在职认证  发表于 2013-6-4 08:22:58
这个错误应该不是“data fin;   set fin; if permno ne lag1(permno);   curdat = 100*&yyy + &mmm;  iter = &j;” 这一步产生的。
和谐拯救危机

报纸
jingju11 发表于 2013-6-4 09:24:41
Agree with them.
Just guessing: if proc means automatically picks up the format of permno, is it possible for its output giving a different type of permno with the original one?  Of course, it is possible only if permno is numeric in data two that actually originates from data one.
jingju

地板
guanglei 发表于 2013-6-4 14:05:41
谢谢各位的答案,我先试试看
三人行,必有我师焉;择其善者而从之,其不善者而改之

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

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