<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic using two SET statements to combine 2 datasets in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/using-two-SET-statements-to-combine-2-datasets/m-p/295958#M61915</link>
    <description>&lt;P&gt;Hi everyone,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I got a question about using 2 SETs to combine&amp;nbsp;2 datasets. My question came from the Little SAS Book (5th ed) on page 12/27:&amp;nbsp;Combining a Grand Total with the Original Data.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;To make it easier to understand, I copy the whole programming:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;A distributor of athletic shoes is considering doing a special promotion for the top-selling styles. The&amp;nbsp;vice-president of marketing asks you to produce a report showing the&lt;FONT color="#000000"&gt;&lt;STRONG&gt; percentage of total sales for each style&lt;/STRONG&gt;&lt;/FONT&gt;. For each&amp;nbsp;style of shoe the raw data file contains the style name, type of exercise, and sales for the last quarter:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT face="courier new,courier"&gt;Max Flight &amp;nbsp; &amp;nbsp; &amp;nbsp;running 1930&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt;Zip Fit Leather walking 2250&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt;Zoom Airborne &amp;nbsp; running 4150&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt;Light Step &amp;nbsp; &amp;nbsp; &amp;nbsp;walking 1130&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt;Max Step Woven &amp;nbsp;walking 2230&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt;Zip Sneak &amp;nbsp; &amp;nbsp; &amp;nbsp; c-train 1190&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT face="courier new,courier"&gt;Here is the program:&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT face="courier new,courier"&gt;DATA &lt;FONT color="#FF0000"&gt;shoes&lt;/FONT&gt;;&lt;BR /&gt;INFILE 'c:\MyRawData\Shoesales.dat';&lt;BR /&gt;INPUT Style $ 1-15 ExerciseType $ Sales;&lt;BR /&gt;RUN;&lt;BR /&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT face="courier new,courier"&gt;* Output grand total of sales to a data set and print;&lt;BR /&gt;PROC MEANS NOPRINT DATA = shoes;&lt;BR /&gt;VAR Sales;&lt;BR /&gt;OUTPUT OUT = &lt;FONT color="#FF0000"&gt;summarydata&lt;/FONT&gt; SUM(Sales) = GrandTotal;&lt;BR /&gt;RUN;&lt;BR /&gt;PROC PRINT DATA = summarydata;&lt;BR /&gt;TITLE 'Summary Data Set';&lt;BR /&gt;RUN;&lt;BR /&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT face="courier new,courier"&gt;* Combine the grand total with the original data;&lt;BR /&gt;DATA shoesummary;&lt;BR /&gt;IF _N_ = 1 THEN SET summarydata;&lt;BR /&gt;SET shoes;&lt;BR /&gt;Percent = Sales / GrandTotal * 100;&lt;BR /&gt;RUN;&lt;BR /&gt;PROC PRINT DATA = shoesummary;&lt;BR /&gt;VAR Style ExerciseType Sales GrandTotal Percent;&lt;BR /&gt;TITLE 'Overall Sales Share';&lt;BR /&gt;RUN;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT face="courier new,courier"&gt;----------------------&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT face="courier new,courier"&gt;My question is in the last part (&lt;SPAN&gt;Combine the grand total with the original data):&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;FONT face="courier new,courier"&gt;DATA shoesummary;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;FONT face="courier new,courier"&gt;IF _N_ = 1 THEN SET summarydata;&lt;BR /&gt;SET shoes;&lt;BR /&gt;Percent = Sales / GrandTotal * 100;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT face="courier new,courier"&gt;&lt;SPAN&gt;&lt;SPAN&gt;I do'nt quite understand why "IF _N_ = 1 THEN SET summarydata" is used here (although it works beautifully), why don't just simply use my simple version like this:&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT face="courier new,courier"&gt;DATA shoesummary;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT face="courier new,courier"&gt;&lt;SPAN&gt;&lt;SPAN&gt;SET summarydata;&lt;BR /&gt;&lt;SPAN&gt;SET shoes;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Percent = Sales / GrandTotal * 100;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT face="courier new,courier"&gt;Of course, my simple version does not work.&amp;nbsp;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT face="courier new,courier"&gt;The dataset&amp;nbsp;&lt;SPAN&gt;&lt;FONT color="#FF0000"&gt;summarydata&lt;/FONT&gt;&amp;nbsp;has only 1 line of observation, "&lt;STRONG&gt;IF _N_ = 1 THEN SET summarydata" &lt;/STRONG&gt;will copy the whole dataset, my simple version will also copy the whole dataset. They are supposed to be the same, in my opinion, but actually NOT. Then what's the difference between them? is there any special reason to use&amp;nbsp;"&lt;STRONG&gt;IF _N_ = 1 THEN SET summarydata" ?&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT face="courier new,courier"&gt;&lt;SPAN&gt;(if this question sounds to be too silly, please forgive me)&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT face="courier new,courier"&gt;&lt;SPAN&gt;Thanks.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;BR /&gt;&lt;IMG src="https://communities.sas.com/t5/image/serverpage/image-id/12919iFBDB30CB02377E2A/image-size/large?v=1.0&amp;amp;px=600" border="0" alt="SAS question.jpg" title="SAS question.jpg" /&gt;</description>
    <pubDate>Thu, 01 Sep 2016 18:13:23 GMT</pubDate>
    <dc:creator>mich_ard</dc:creator>
    <dc:date>2016-09-01T18:13:23Z</dc:date>
    <item>
      <title>using two SET statements to combine 2 datasets</title>
      <link>https://communities.sas.com/t5/SAS-Programming/using-two-SET-statements-to-combine-2-datasets/m-p/295958#M61915</link>
      <description>&lt;P&gt;Hi everyone,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I got a question about using 2 SETs to combine&amp;nbsp;2 datasets. My question came from the Little SAS Book (5th ed) on page 12/27:&amp;nbsp;Combining a Grand Total with the Original Data.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;To make it easier to understand, I copy the whole programming:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;A distributor of athletic shoes is considering doing a special promotion for the top-selling styles. The&amp;nbsp;vice-president of marketing asks you to produce a report showing the&lt;FONT color="#000000"&gt;&lt;STRONG&gt; percentage of total sales for each style&lt;/STRONG&gt;&lt;/FONT&gt;. For each&amp;nbsp;style of shoe the raw data file contains the style name, type of exercise, and sales for the last quarter:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT face="courier new,courier"&gt;Max Flight &amp;nbsp; &amp;nbsp; &amp;nbsp;running 1930&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt;Zip Fit Leather walking 2250&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt;Zoom Airborne &amp;nbsp; running 4150&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt;Light Step &amp;nbsp; &amp;nbsp; &amp;nbsp;walking 1130&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt;Max Step Woven &amp;nbsp;walking 2230&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt;Zip Sneak &amp;nbsp; &amp;nbsp; &amp;nbsp; c-train 1190&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT face="courier new,courier"&gt;Here is the program:&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT face="courier new,courier"&gt;DATA &lt;FONT color="#FF0000"&gt;shoes&lt;/FONT&gt;;&lt;BR /&gt;INFILE 'c:\MyRawData\Shoesales.dat';&lt;BR /&gt;INPUT Style $ 1-15 ExerciseType $ Sales;&lt;BR /&gt;RUN;&lt;BR /&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT face="courier new,courier"&gt;* Output grand total of sales to a data set and print;&lt;BR /&gt;PROC MEANS NOPRINT DATA = shoes;&lt;BR /&gt;VAR Sales;&lt;BR /&gt;OUTPUT OUT = &lt;FONT color="#FF0000"&gt;summarydata&lt;/FONT&gt; SUM(Sales) = GrandTotal;&lt;BR /&gt;RUN;&lt;BR /&gt;PROC PRINT DATA = summarydata;&lt;BR /&gt;TITLE 'Summary Data Set';&lt;BR /&gt;RUN;&lt;BR /&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT face="courier new,courier"&gt;* Combine the grand total with the original data;&lt;BR /&gt;DATA shoesummary;&lt;BR /&gt;IF _N_ = 1 THEN SET summarydata;&lt;BR /&gt;SET shoes;&lt;BR /&gt;Percent = Sales / GrandTotal * 100;&lt;BR /&gt;RUN;&lt;BR /&gt;PROC PRINT DATA = shoesummary;&lt;BR /&gt;VAR Style ExerciseType Sales GrandTotal Percent;&lt;BR /&gt;TITLE 'Overall Sales Share';&lt;BR /&gt;RUN;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT face="courier new,courier"&gt;----------------------&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT face="courier new,courier"&gt;My question is in the last part (&lt;SPAN&gt;Combine the grand total with the original data):&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;FONT face="courier new,courier"&gt;DATA shoesummary;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;FONT face="courier new,courier"&gt;IF _N_ = 1 THEN SET summarydata;&lt;BR /&gt;SET shoes;&lt;BR /&gt;Percent = Sales / GrandTotal * 100;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT face="courier new,courier"&gt;&lt;SPAN&gt;&lt;SPAN&gt;I do'nt quite understand why "IF _N_ = 1 THEN SET summarydata" is used here (although it works beautifully), why don't just simply use my simple version like this:&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT face="courier new,courier"&gt;DATA shoesummary;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT face="courier new,courier"&gt;&lt;SPAN&gt;&lt;SPAN&gt;SET summarydata;&lt;BR /&gt;&lt;SPAN&gt;SET shoes;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Percent = Sales / GrandTotal * 100;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT face="courier new,courier"&gt;Of course, my simple version does not work.&amp;nbsp;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT face="courier new,courier"&gt;The dataset&amp;nbsp;&lt;SPAN&gt;&lt;FONT color="#FF0000"&gt;summarydata&lt;/FONT&gt;&amp;nbsp;has only 1 line of observation, "&lt;STRONG&gt;IF _N_ = 1 THEN SET summarydata" &lt;/STRONG&gt;will copy the whole dataset, my simple version will also copy the whole dataset. They are supposed to be the same, in my opinion, but actually NOT. Then what's the difference between them? is there any special reason to use&amp;nbsp;"&lt;STRONG&gt;IF _N_ = 1 THEN SET summarydata" ?&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT face="courier new,courier"&gt;&lt;SPAN&gt;(if this question sounds to be too silly, please forgive me)&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT face="courier new,courier"&gt;&lt;SPAN&gt;Thanks.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;BR /&gt;&lt;IMG src="https://communities.sas.com/t5/image/serverpage/image-id/12919iFBDB30CB02377E2A/image-size/large?v=1.0&amp;amp;px=600" border="0" alt="SAS question.jpg" title="SAS question.jpg" /&gt;</description>
      <pubDate>Thu, 01 Sep 2016 18:13:23 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/using-two-SET-statements-to-combine-2-datasets/m-p/295958#M61915</guid>
      <dc:creator>mich_ard</dc:creator>
      <dc:date>2016-09-01T18:13:23Z</dc:date>
    </item>
    <item>
      <title>Re: using two SET statements to combine 2 datasets</title>
      <link>https://communities.sas.com/t5/SAS-Programming/using-two-SET-statements-to-combine-2-datasets/m-p/295978#M61924</link>
      <description>&lt;P&gt;mich_ard,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Consider a simple data step like this:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;data new;&lt;/P&gt;
&lt;P&gt;set shoes;&lt;/P&gt;
&lt;P&gt;amount=100;&lt;/P&gt;
&lt;P&gt;run;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The key questions related to your example are how many times does the SET statement execute? And how does this DATA step end?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The SET statement does not read all the data.&amp;nbsp; Rather, it reads a single observation.&amp;nbsp; For that single observation, the DATA step computes AMOUNT and outputs the results.&amp;nbsp; Then the SET statement executes again and gets the second observation.&amp;nbsp; For the second observation the DATA step computes AMOUNT and outputs the result.&amp;nbsp; The SET statement executes many times, each time reading in a single observation.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Eventually, the SET statement fails.&amp;nbsp; It looks for another observation, and determines that there are no more.&amp;nbsp; That's a normal ending to a DATA step to have the SET statement fail.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Now consider your program:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;data shoesummary;&lt;/P&gt;
&lt;P&gt;set summarydata;&lt;/P&gt;
&lt;P&gt;set shoes;&lt;/P&gt;
&lt;P&gt;percent = ...;&lt;/P&gt;
&lt;P&gt;run;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;As this DATA step begins, the first set statement reads in the one and only observation from SUMMARYDATA.&amp;nbsp; Then the second observation reads in the first observation from SHOES.&amp;nbsp; The DATA step computes PERCENT and outputs the results.&amp;nbsp; Then the DATA step continues.&amp;nbsp; The first SET statement searches for a second observation in SUMMARYDATA.&amp;nbsp; It fails to find another observation, at which point the DATA step is over.&amp;nbsp; A SET statement has failed.&amp;nbsp; It doesn't matter that SHOES has not yet been fully read in ... it only matters that a SET statement has failed.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 01 Sep 2016 19:24:24 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/using-two-SET-statements-to-combine-2-datasets/m-p/295978#M61924</guid>
      <dc:creator>Astounding</dc:creator>
      <dc:date>2016-09-01T19:24:24Z</dc:date>
    </item>
    <item>
      <title>Re: using two SET statements to combine 2 datasets</title>
      <link>https://communities.sas.com/t5/SAS-Programming/using-two-SET-statements-to-combine-2-datasets/m-p/295981#M61926</link>
      <description>&lt;P&gt;using &lt;STRONG&gt;IF _N_ = 1&amp;nbsp;&lt;/STRONG&gt; wiil read grandtotal into memory once and proceed with next code lines;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;using set twice will read the summary dataet &lt;STRONG&gt;again&lt;/STRONG&gt; and&lt;/P&gt;&lt;P&gt;wiil get to end-of-file &amp;nbsp; and grandtotal will be set to missing&lt;/P&gt;</description>
      <pubDate>Thu, 01 Sep 2016 19:30:30 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/using-two-SET-statements-to-combine-2-datasets/m-p/295981#M61926</guid>
      <dc:creator>Shmuel</dc:creator>
      <dc:date>2016-09-01T19:30:30Z</dc:date>
    </item>
    <item>
      <title>Re: using two SET statements to combine 2 datasets</title>
      <link>https://communities.sas.com/t5/SAS-Programming/using-two-SET-statements-to-combine-2-datasets/m-p/295984#M61927</link>
      <description>&lt;P&gt;Your question involved&amp;nbsp;several&amp;nbsp;fundamentals of data&amp;nbsp;step. For details,&amp;nbsp;the best instruction I&amp;nbsp;found is from&amp;nbsp;&lt;A href="http://www2.sas.com/proceedings/sugi22/ADVTUTOR/PAPER34.PDF" target="_self"&gt;Ian Whitlock&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;In short, 'if _n_=1' demands to read only 1 obs from 'summarydata' without triggering off the 'end of the file'&amp;nbsp;event,&amp;nbsp;so data step can keep&amp;nbsp;moving on reading&amp;nbsp;obs from 'shoes' until it is done. You may have already tested,&amp;nbsp;without 'if&amp;nbsp;_n_=1', data step will stop after&amp;nbsp;outputting 1 obs. &amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 01 Sep 2016 19:35:30 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/using-two-SET-statements-to-combine-2-datasets/m-p/295984#M61927</guid>
      <dc:creator>Haikuo</dc:creator>
      <dc:date>2016-09-01T19:35:30Z</dc:date>
    </item>
  </channel>
</rss>

