五月天婷亚洲天久久综合网,婷婷丁香五月激情亚洲综合,久久男人精品女人,麻豆91在线播放

  • <center id="8gusu"></center><rt id="8gusu"></rt>
    <menu id="8gusu"><small id="8gusu"></small></menu>
  • <dd id="8gusu"><s id="8gusu"></s></dd>
    樓主: Tigflanker
    8530 9

    [問答] 如何獲取某數(shù)值變量的實(shí)際數(shù)值長度 [推廣有獎(jiǎng)]

    • 8關(guān)注
    • 18粉絲

    副教授

    49%

    還不是VIP/貴賓

    -

    威望
    0
    論壇幣
    2321 個(gè)
    通用積分
    9.8528
    學(xué)術(shù)水平
    179 點(diǎn)
    熱心指數(shù)
    194 點(diǎn)
    信用等級
    167 點(diǎn)
    經(jīng)驗(yàn)
    27443 點(diǎn)
    帖子
    622
    精華
    0
    在線時(shí)間
    851 小時(shí)
    注冊時(shí)間
    2011-3-27
    最后登錄
    2023-5-14

    樓主
    Tigflanker 發(fā)表于 2013-10-20 11:38:50 |只看作者 |壇友微信交流群|倒序 |AI寫論文
    50論壇幣
    求助各位大神一個(gè)問題:

    基本目標(biāo):想要獲得某數(shù)值變量的實(shí)際長度。
    例如:2.3   34.4   4   4.55   12.34  則按照最長的那個(gè)值12.34返回:4.2

    打算用 retain + length + max 取得所有觀測的最大長度;打算用 length - find . 獲得小數(shù)位數(shù)。

    遇到的困難是:length方法必須用在字符型變量,而若使用put方法轉(zhuǎn)換時(shí),需要指定轉(zhuǎn)換格式。
    而且又不希望直接用compress強(qiáng)行轉(zhuǎn)化,會(huì)有強(qiáng)轉(zhuǎn)提示,如此陷入困境。

    請問各位,有無解法?謝謝。

    1. data in;
    2. input a b @@;
    3. cards;
    4. 2.3 3 3.4 4 13.2 2 2 2 23.33 4
    5. ;
    6. run;

    7. data out;set in;retain length 1;
    8.   length=max(length,length(compress(a,.)));   run;
    復(fù)制代碼

    自己已寫好,貢獻(xiàn)出來,也許會(huì)有人要用:

    1. %Macro TF_JD(TF_JD_DS=,TF_JD_VAR=);
    2.   %let dsid=%sysfunc(open(&TF_JD_DS.));  
    3.   %let TF_JD_R=%sysfunc(vartype(&dsid,%sysfunc(varnum(&dsid,&TF_JD_VAR.))));
    4.   
    5.   data _NULL_;set &TF_JD_DS. end=last;
    6.     retain TF_JD_Temp111 0 TF_JD_Temp222 0;
    7.   
    8.     %if &TF_JD_R. eq C %then %do;
    9.       &TF_JD_VAR.1=input(&TF_JD_VAR.,best.);%end;
    10.     %else %do;&TF_JD_VAR.1=&TF_JD_VAR.;%end;
    11.   
    12.     TF_JD_Temp1=intz(&TF_JD_VAR.1);
    13.     TF_JD_Temp2=&TF_JD_VAR.1-TF_JD_Temp1;
    14.   
    15.     TF_JD_Temp11=length(strip(put(TF_JD_Temp1,best.)));
    16.     TF_JD_Temp22=length(strip(compress(put(TF_JD_Temp2,best.),'-')))-2;
    17.   
    18.     TF_JD_Temp111=max(TF_JD_Temp11,TF_JD_Temp111);
    19.     TF_JD_Temp222=max(TF_JD_Temp22,TF_JD_Temp222);
    20.   
    21.     if last then call symputx('TF_JD_R',
    22.             strip(put(TF_JD_Temp111+TF_JD_Temp222,best.))||'.'||strip(put(TF_JD_Temp222,best.)));
    23.   run;
    24. %Mend TF_JD;

    25. data b;
    26.   c='1.234';output;
    27.   c='-12.3';output;
    28.   c='1.3';output;
    29. run;

    30. %TF_JD(TF_JD_DS=b,TF_JD_VAR=c);
    31. %put >>>%sysevalf(&TF_JD_R.+1)<<<;
    復(fù)制代碼


    關(guān)鍵詞:數(shù)值變量 compress sysfunc length output 如何
    Bye SAS.
    若有緣,能重聚。
    沙發(fā)
    yongyitian 發(fā)表于 2013-10-20 11:38:51 |只看作者 |壇友微信交流群
    1. data in;
    2. input a @@;
    3. cards;
    4. 2.3 3 311.4 4 13.2 2 2 2 23.33 4 1393.234
    5. ;
    6. run;

    7. data out;
    8.     set in;
    9.     retain  max_int max_dec max_len;
    10.       int_len = int(log10(a))+1;
    11.       dec_len = length(scan(a, 2, '.'));
    12.            LL = int_len + dec_len + 1;
    13.           fff = cats(LL, '.', dec_len);
    14.      if Int_len > max_int then max_int = int_len;
    15.      if dec_len > max_dec then max_dec = dec_len;
    16.           if LL > max_len then max_len = LL;
    17. run;
    18. proc print data=out; title 'out'; run;
    復(fù)制代碼
    藤椅
    Tigflanker 發(fā)表于 2013-10-20 13:21:17 |只看作者 |壇友微信交流群
    yongyitian 發(fā)表于 2013-10-20 12:39
    感謝!!

    scan(a, 2, '.')還有強(qiáng)轉(zhuǎn)NOTE,不過int()給了我很大的提示,我記得還有一個(gè)取小數(shù)的方法。

    采納你了。
    Bye SAS.
    若有緣,能重聚。
    板凳
    yeting2000 在職認(rèn)證  發(fā)表于 2013-10-21 09:29:23 |只看作者 |壇友微信交流群
    看看
    報(bào)紙
    yongyitian 發(fā)表于 2013-10-21 10:20:07 |只看作者 |壇友微信交流群
    Tigflanker 發(fā)表于 2013-10-20 13:21
    感謝!

    scan(a, 2, '.')還有強(qiáng)轉(zhuǎn)NOTE,不過int()給了我很大的提示,我記得還有一個(gè)取小數(shù)的方法。 ...
    1. data test;
    2.   input a;
    3.   do dec_len = 1 by 1 until(d<1.0E-12);
    4.    p= 10**dec_len;
    5.    d = a*p - int(a*p);
    6.   end;
    7.   put a=  dec_len=;
    8.   drop p d;
    9. datalines;
    10. 1.1
    11. 1.12
    12. 1.123
    13. 1.1234
    14. 1.12345
    15. 1.123456
    16. ;run;
    復(fù)制代碼
    地板
    hopewell 發(fā)表于 2013-10-21 10:38:21 |只看作者 |壇友微信交流群
    1. data out;
    2.     retain _in _dn fmt;
    3.     if _n_=1 then do until(last);
    4.         set in end=last;
    5.         _re=prxparse('/(\d*)\.?(\d*)/');
    6.         if prxmatch(_re,strip(put(a,best32.))) then do;
    7.             call prxposn(_re,1,_p,_l1);
    8.             call prxposn(_re,2,_p,_l2);
    9.         end;
    10.         _in=max(_in,_l1);
    11.         _dn=max(_dn,_l2);
    12.         fmt=catx('.',sum(_in,_dn,1),_dn);
    13.     end;
    14.     set in;
    15.     drop _:;
    16. run;
    復(fù)制代碼
    觀釣頗逾垂釣趣 種花何問看花誰
    7
    _i_ 發(fā)表于 2013-10-21 12:15:17 |只看作者 |壇友微信交流群
    結(jié)果怎么一個(gè)都看不懂
    8
    mark8865 發(fā)表于 2015-7-6 14:39:18 |只看作者 |壇友微信交流群
    請問哪個(gè)函數(shù)可以直接讀取數(shù)值型變量的長度?
    9
    Tigflanker 發(fā)表于 2015-7-6 15:17:47 |只看作者 |壇友微信交流群
    mark8865 發(fā)表于 2015-7-6 14:39
    請問哪個(gè)函數(shù)可以直接讀取數(shù)值型變量的長度?
    如果你指的是變量本身的長度,用vlength、vformat、vinformat即可

    如果你指的是這個(gè)變量里的值,最大的是?.?(例如12.4),那可能沒直接的方法。
    10
    mark8865 發(fā)表于 2015-7-6 15:37:05 |只看作者 |壇友微信交流群
    Tigflanker 發(fā)表于 2015-7-6 15:17
    如果你指的是變量本身的長度,用vlength、vformat、vinformat即可

    如果你指的是這個(gè)變量里的值,最大的 ...
    謝謝你的幫助,最近在弄數(shù)據(jù),新手一枚,遇到好多問題。
    您需要登錄后才可以回帖 登錄 | 我要注冊

    本版微信群
    加好友,備注cda
    拉您進(jìn)交流群

    京ICP備16021002-2號(hào) 京B2-20170662號(hào) 京公網(wǎng)安備 11010802022788號(hào) 論壇法律顧問:王進(jìn)律師 知識(shí)產(chǎn)權(quán)保護(hù)聲明   免責(zé)及隱私聲明

    GMT+8, 2024-12-23 21:39