五月天婷亚洲天久久综合网,婷婷丁香五月激情亚洲综合,久久男人精品女人,麻豆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>
    4550 12

    [問答] 如何用SAS對變化的變量求和? [推廣有獎]

    • 0關(guān)注
    • 0粉絲

    大專生

    55%

    還不是VIP/貴賓

    -

    威望
    0
    論壇幣
    136 個
    通用積分
    0.8500
    學(xué)術(shù)水平
    0 點(diǎn)
    熱心指數(shù)
    0 點(diǎn)
    信用等級
    0 點(diǎn)
    經(jīng)驗(yàn)
    1742 點(diǎn)
    帖子
    5
    精華
    0
    在線時間
    110 小時
    注冊時間
    2016-9-5
    最后登錄
    2023-11-20

    5論壇幣
    大神們,求教!比如說有一個數(shù)據(jù)集,第一行是變量名,第二行開始是變量值。
    標(biāo)的        start   end          1       2      3     4      5      6      7     8
    A              2      5           0.2     0.5   0.3   0.2   0.4    0.4    0.2   0.7
    …………
    我想求每行從start 到end 的和,放在每行末尾,應(yīng)該怎么寫代碼?
    真心求教。!剛學(xué)SAS不大會……

    最佳答案

    foocares 查看完整內(nèi)容

    如上文所言,整理原始數(shù)據(jù)很重要,比如看了你的數(shù)據(jù)后我知道你開始計(jì)數(shù)的年份是從78年開始,到06年結(jié)束。 那么換成數(shù)組時start 和end可就不能在這個范圍之外,而你的原始數(shù)據(jù)里有start計(jì)為77年的,end甚至有計(jì)為9999年的,這很容易就讓array下標(biāo)越界報(bào)錯,因此,在原始代碼里我加了兩行修正用于保護(hù): PROC IMPORT DATAFILE = 'D:\SAS9\My SAS Files\9.0\Little SAS Book Codes\hw5.xls' DBMS=excel OUT = hw5test; RUN; / ...
    關(guān)鍵詞:如何用 Start STAR End ART 如何
    沙發(fā)
    foocares 發(fā)表于 2017-4-15 19:18:02 |只看作者 |壇友微信交流群
    如上文所言,整理原始數(shù)據(jù)很重要,比如看了你的數(shù)據(jù)后我知道你開始計(jì)數(shù)的年份是從78年開始,到06年結(jié)束。
    那么換成數(shù)組時start 和end可就不能在這個范圍之外,而你的原始數(shù)據(jù)里有start計(jì)為77年的,end甚至有計(jì)為9999年的,這很容易就讓array下標(biāo)越界報(bào)錯,因此,在原始代碼里我加了兩行修正用于保護(hù):

    PROC IMPORT DATAFILE = 'D:\SAS9\My SAS Files\9.0\Little SAS Book Codes\hw5.xls' DBMS=excel OUT = hw5test;
    RUN;

    /*先選前十個記錄試試*/
    options obs = 10;
    data test;
            set hw5test(drop = eventid name location newdate2str location1);
            array myar(*) F8 - F36;
    *assume F8 data always starts in 1978;
            startyear = 1978;
            endyear = 2006;
            /* 78年前的start標(biāo)記沒數(shù)據(jù)對應(yīng),那我求和反正就從有數(shù)據(jù)的元年78年開始算了*/
            if start < startyear then start = startyear;
            start_idx = start - startyear + 1;
           /*同理06年后的end也無數(shù)據(jù)可對應(yīng),那我求和也就到最后一列06年打止了*/
            if end > endyear then end = endyear;
            end_idx = end - startyear + 1;
            do i = start_idx to end_idx;
                    total + myar(i);
            end;
        put total=;

    run;

    SAS運(yùn)算結(jié)果前十行結(jié)果如下:
    total=10.29
    total=46.22
    total=106.4
    total=206.01
    total=261.38
    total=318.17
    total=339.46
    total=350.02
    total=386.76
    total=441.83


    你看看對不對得上。
    藤椅
    離居盈寒暑7 發(fā)表于 2017-4-15 19:20:17 |只看作者 |壇友微信交流群
    start 和end都是變化的,怎樣求每行從start 到end的和
    板凳
    foocares 發(fā)表于 2017-4-15 22:17:43 |只看作者 |壇友微信交流群
    用array來實(shí)現(xiàn)。開頭定義array myarray(*) var1-var8
    讀每行的數(shù)據(jù)進(jìn)來。
    do i = start to end
    total+array(i);
    end;

    total是你每行求和的結(jié)果,會寫到最后的輸出數(shù)據(jù)里。
    報(bào)紙
    離居盈寒暑7 發(fā)表于 2017-4-18 12:36:11 |只看作者 |壇友微信交流群
    foocares 發(fā)表于 2017-4-15 22:17
    用array來實(shí)現(xiàn)。開頭定義array myarray(*) var1-var8
    讀每行的數(shù)據(jù)進(jìn)來。
    do i = start to end
    哇,謝大神~
    data hw5_1;
    set hw5;
    array myarray(29) 1978y-2006y;
    do i = start to end;
    total+array(i);
    end;
    run;
    試了一下,不行哎,可以再請教下嗎?
    地板
    孤單的我們 發(fā)表于 2017-4-18 12:54:59 |只看作者 |壇友微信交流群
    do i=1 to 29;
    7
    離居盈寒暑7 發(fā)表于 2017-4-18 12:57:41 |只看作者 |壇友微信交流群
    求指點(diǎn),數(shù)據(jù)已經(jīng)貼上!就是想在每行的末尾放上從start到end對應(yīng)的年份的GDP和

    hw5.xls

    560.5 KB

    這是處理了一部分的數(shù)據(jù)

    8
    離居盈寒暑7 發(fā)表于 2017-4-18 12:59:42 |只看作者 |壇友微信交流群
    孤單的我們 發(fā)表于 2017-4-18 12:54
    do i=1 to 29;
    我想在每行選擇start到end求和,不需要全部求和~~star和end是變化的
    9
    foocares 發(fā)表于 2017-4-18 13:04:47 |只看作者 |壇友微信交流群
    能貼下log嗎?你的start和end在不在hw5的set里,是固定能讀到的兩列嗎?
    不過思路反正就是這樣了:
    假定set有如下結(jié)構(gòu):
    obs  start  end  v1    v2   v3   v4   v5
    1       2     3     5.6  6.6 4.5  6.7  8.9
    2       3     5     xx    xx   xx  xx    xx
    .....
    那么在data步的每一個循環(huán)里,我既能讀到每一行的start和end值,也知道array(i)都對應(yīng)著后頭的Vi,
    求和的范圍是由每次讀到的start和end來決定,對應(yīng)著求和數(shù)組元素的下標(biāo),而每行求和的值記在了total里,輸出到目標(biāo)文件。
    這么實(shí)現(xiàn)并沒理解錯吧?

    10
    foocares 發(fā)表于 2017-4-18 13:30:44 |只看作者 |壇友微信交流群
    離居盈寒暑7 發(fā)表于 2017-4-18 12:57
    求指點(diǎn),數(shù)據(jù)已經(jīng)貼上!就是想在每行的末尾放上從start到end對應(yīng)的年份的GDP和
    根據(jù)你這個數(shù)據(jù)格式,我的理解F和G列對應(yīng)你說的start和end,對么。
    不知道你程序具體怎么實(shí)現(xiàn)的,總不會直接讀了年份就去套后面的下標(biāo)吧。。。
    這里肯定要做一個數(shù)據(jù)重組,先換算把年份跟后頭的數(shù)據(jù)index要能一一對應(yīng)起來。比如:
    按我理解H列開始是最早的年份數(shù)據(jù),那么它對應(yīng)的哪一年?start跟它對應(yīng)年份的關(guān)系應(yīng)該是
    該年 - H列所在年份 +1
    比如H列是從95年開始,那么1998對應(yīng)著start = 4, end在2000年對應(yīng)的6. 與之相對應(yīng)的是你excel里的K到 M求和
      98  00    95  96 97 98 99 00  
    start end   H    I   J   K    L  M
      4     6    a(1) ........a(4)...a(6)

    希望你的年份計(jì)數(shù)是固定連續(xù)的,也就是說,H列統(tǒng)統(tǒng)是起始年數(shù)據(jù),I列是后續(xù)第二年數(shù)據(jù)。
    您需要登錄后才可以回帖 登錄 | 我要注冊

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

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

    GMT+8, 2024-12-23 16:13